2

我正在使用 node.js 的加密模块来生成一个 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抛出的,因为这里定义为。问题是返回的密钥不是 32 字节大小。tweetnaclcrypto_secretbox_KEYBYTES32 crypto

我已经搜索了 SO 和相关网站,但找不到任何可行的解决方案,但据此-转换为十六进制的 SHA256 哈希产生:

32 个单独的十六进制数(或 32 个字节)

如何使用 node.js 生成 32 字节的 SHA256 密钥以避免此错误?在生成 SHA256 哈希时我做错了什么吗?

4

1 回答 1

1

以下代码片段解决了生成 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);

这总是生成一个Uint8Array32 字节大小的。请注意,crypto-js尽管我更喜欢使用本机crypto模块,但我必须使用该模块,但我想我现在只使用它,因为它是一个可行的解决方案。

感谢@Arihant 指出这一点(查看评论部分)

于 2018-08-24T04:49:24.180 回答