如何使用 nodejs(加密)生成 32 字节的 SHA256 哈希以避免从 tweetnacl.js 抛出错误的密钥大小错误?
How to generate a SHA256 hash of 32 bytes using nodejs (crypto) in order to avoid bad key size error thrown from tweetnacl.js?
我正在使用 node.js 的 crypto 模块来生成这样的 SHA256 哈希:
const key = crypto.createHmac('sha256', data).digest('hex');
现在,tweetnacl 抛出错误:bad key size
当在 secretbox
中传递密钥时:
nacl.secretbox(data, Rnonc, key);
参数被转换为 Uint8Array,因为 secretbox
要求参数为 Uint8Array。
错误:bad key size
是从 here in tweetnacl
since the crypto_secretbox_KEYBYTES
is defined as 32
here 抛出的。问题是从 crypto
返回的密钥不是 32 字节大小。
我搜索了 SO 和相关站点,但找不到任何可行的解决方案,但根据 this - 转换为十六进制的 SHA256 哈希生成:
32 separate hexadecimal numbers (or 32 bytes)
如何使用 node.js 生成 32 字节的 SHA256 密钥以避免此错误?在生成 SHA256 哈希时我做错了什么吗?
以下代码片段解决了生成 32 字节 SHA256 哈希的问题,避免了 tweetnacl.js:
抛出的错误密钥大小错误
const CryptoJS = require('crypto-js');
let hash = CryptoJS.SHA256('hello world');
let buffer = Buffer.from(hash.toString(CryptoJS.enc.Hex), 'hex');
let array = new Uint8Array(buffer);
这总是生成 32 字节大小的 Uint8Array
。注意这里我不得不使用 crypto-js
模块,虽然我更喜欢使用原生的 crypto
模块,但我想我现在会使用它,因为它是一个可行的解决方案。
感谢@Arihant 指向 this(查看评论部分)
我正在使用 node.js 的 crypto 模块来生成这样的 SHA256 哈希:
const key = crypto.createHmac('sha256', data).digest('hex');
现在,tweetnacl 抛出错误:bad key size
当在 secretbox
中传递密钥时:
nacl.secretbox(data, Rnonc, key);
参数被转换为 Uint8Array,因为 secretbox
要求参数为 Uint8Array。
错误:bad key size
是从 here in tweetnacl
since the crypto_secretbox_KEYBYTES
is defined as 32
here 抛出的。问题是从 crypto
返回的密钥不是 32 字节大小。
我搜索了 SO 和相关站点,但找不到任何可行的解决方案,但根据 this - 转换为十六进制的 SHA256 哈希生成:
32 separate hexadecimal numbers (or 32 bytes)
如何使用 node.js 生成 32 字节的 SHA256 密钥以避免此错误?在生成 SHA256 哈希时我做错了什么吗?
以下代码片段解决了生成 32 字节 SHA256 哈希的问题,避免了 tweetnacl.js:
抛出的错误密钥大小错误const CryptoJS = require('crypto-js');
let hash = CryptoJS.SHA256('hello world');
let buffer = Buffer.from(hash.toString(CryptoJS.enc.Hex), 'hex');
let array = new Uint8Array(buffer);
这总是生成 32 字节大小的 Uint8Array
。注意这里我不得不使用 crypto-js
模块,虽然我更喜欢使用原生的 crypto
模块,但我想我现在会使用它,因为它是一个可行的解决方案。
感谢@Arihant 指向 this(查看评论部分)