Chr*_* C. 4 javascript node.js
我在将我知道在 Ruby 中有效的东西转换为 Javascript 时遇到问题(在这种情况下是 node.js,但如果可能的话,我想要浏览器支持的解决方案)
给定一个十六进制格式的 sha256 摘要:
"0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373"
Run Code Online (Sandbox Code Playgroud)
将其转换为如下所示的 base32 表示:
"BMEN72AKJFEQVYDSFOJQN72TYWVTKUWRPECYCTTGRDXGFQ3T"
Run Code Online (Sandbox Code Playgroud)
我可以通过运行一个快速例程将十六进制转换为字符代码字符串,然后对它进行 base32 编码,从而在 ruby 中做到这一点。我似乎无法在 JavaScript 中找到类似的方法。似乎没有可靠的方法来获取字符代码或 Base32 编码。
以 Ruby 代码为例,我只是一次将十六进制分块出 1 个字符,然后进行快速的十六进制-> 十进制-> 字符转换:
s = "0b08dfe80a49490ae0722b9306ff53c5ab3552d17905814e6688ee62c373"
s2 = s.scan(/../).map { |x| x.hex.chr }.join
s3 = Base32.encode(s2)
Run Code Online (Sandbox Code Playgroud)
中间字符串如下所示:
"\v\b\xDF\xE8\nII\n\xE0r+\x93\x06\xFFS\xC5\xAB5R\xD1y\x05\x81Nf\x88\xEEb\xC3s\x8AM"
Run Code Online (Sandbox Code Playgroud)
请记住,有几个 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'
Run Code Online (Sandbox Code Playgroud)
但是,如果您想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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4864 次 |
| 最近记录: |