【问题标题】:Javascript Hex to Base32-encodingJavascript Hex 到 Base32 编码
【发布时间】:2015-11-21 23:51:39
【问题描述】:

我在将我知道在 Ruby 中工作的东西转换为 Javascript 时遇到了问题(在这种情况下是 node.js,但如果可能的话,我想要一个浏览器支持的解决方案)

给定一个十六进制格式的 sha256 摘要:

"0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373"

将其转换为如下所示的 base32 表示:

"BMEN72AKJFEQVYDSFOJQN72TYWVTKUWRPECYCTTGRDXGFQ3T"

我可以在 ruby​​ 中执行此操作,方法是运行一个将十六进制转换为字符代码字符串的快速例程,然后对其进行 base32 编码。我似乎在 JavaScript 中找不到类似的方法。似乎没有可靠的方法来获取字符代码或 Base32 编码。

以 Ruby 代码为例,我只是一次将十六进制分成 1 个字符,然后进行快速的十六进制->十进制->字符转换:

s = "0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373"
s2 = s.scan(/../).map { |x| x.hex.chr }.join
s3 = Base32.encode(s2)

中间字符串如下所示:

"\v\b\xDF\xE8\nII\n\xE0r+\x93\x06\xFFS\xC5\xAB5R\xD1y\x05\x81Nf\x88\xEEb\xC3s\x8AM"

【问题讨论】:

标签: javascript node.js


【解决方案1】:

请记住,有多种 base32 规范。

看起来您使用的是RFC 4648 "base32",但我知道的大多数 JS 实现都使用RFC 4648 "base32hex"Douglas Crockfords Base32

我知道的 RFC 4648 "base32" 的唯一 JS 实现是 hi-base32

这是一个将hex(又名base16)字符串转换为RFC 4648 base32的示例:

var base32 = require('hi-base32');

var s = "0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373";
var s2 = base32.encode(new Buffer(s, 'hex'));
// => 'BMEN72AKJFEQVYDSFOJQN72TYWVTKUWRPECYCTTGRDXGFQ3T'

但如果你想在浏览器中使用hi-base32,你必须自己将hex字符串转换为字节数组:

var s = "0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373";
if (s.length % 2 !== 0) {
  // odd number of characters
  s = '0' + s;
}
var bytes = [];
for (var i = 0; i < s.length; i = i + 2) {
  bytes.push(parseInt(s.slice(i, i + 2), 16));
}
var s2 = base32.encode(bytes);

【讨论】:

    猜你喜欢
    • 2012-12-25
    • 2011-07-14
    • 2014-02-24
    • 1970-01-01
    • 2012-06-16
    • 2010-10-13
    • 2012-12-14
    • 2019-03-06
    • 2019-05-05
    相关资源
    最近更新 更多