【问题标题】:How to get public key from arraybuffer?`如何从数组缓冲区获取公钥?`
【发布时间】:2022-02-16 19:14:08
【问题描述】:

我想从 arraybuffer 中获取公钥。

所以,我试过了:

let enc = new TextDecoder("utf-8");
    let arr = new Uint8Array([3, 101, 120, 26, 14, 172, 115, 184, 5, 99, 172, 149, 51, 147, 202, 196, 113, 158, 195, 161, 238, 122, 0, 7, 89, 33, 199, 156, 237, 213, 187, 29, 125]);

    console.log(enc.decode(arr));

但是,它不会抛出预期的结果。

结果应该是这样的026477115981fe981a6918a6297d9803c4dc04f328f22041bedff886bbc2962e01

【问题讨论】:

  • 预期结果是什么?你做了哪些调试步骤?
  • 我期待它的公钥。
  • 能写出预期的结果吗
  • 是的,您期望生成/生成的结果“公钥”的 是什么?当我在控制台中运行此代码时,结果如下:'\x03ex\x1A\x0E�s�\x05c��3���q�á�z\x00\x07Y!ǜ�ջ\x1D}'。这是出乎意料的吗?
  • 您无法将其转换为 UTF-8。这是一个二进制字节数组,需要保持字节数组。

标签: javascript node.js


【解决方案1】:

正如有人指出的那样,无法将二进制数据解码为 utf-8,因为某些字节不是有效的 utf-8。根据您的预期输出,我认为您希望将二进制数据转换为十六进制编码字符串。 “十六进制”字符串是在字符串中使用两个十六进制字符表示单个字节的信息,每个字符介于 0 to f 之间,表示 0-15 以十六进制计数。

您可以使用如下函数进行此类转换:

function toHex(buffer) {
    return Array.from(buffer)
        .map(byte => byte.toString(16).padStart(2, '0'))
        .join('');
}

let arr = new Uint8Array([
  3, 101, 120, 26, 14, 172, 115, 184, 5, 99, 172, 149,
  51, 147, 202, 196, 113, 158, 195, 161, 238, 122, 0,
  7, 89, 33, 199, 156, 237, 213, 187, 29, 125
]);

console.log(toHex(arr));
// prints
// '0365781a0eac73b80563ac953393cac4719ec3a1ee7a00075921c79cedd5bb1d7d'

在字符串中编码二进制数据的另一种常见格式是 base64。 Base64 编码数据占用的空间比十六进制少,因此如果您的实现和其他因素允许,请考虑使用 base64。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    • 2020-10-06
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多