javascript - 如何使用 nodejs(加密)生成 32 字节的 SHA256 哈希,以避免 tweetnacl.js 抛出错误的 key 大小错误?

标签 javascript node.js sha256 cryptojs nacl-cryptography

我正在使用crypto Node.js 模块生成 SHA256 哈希,如下所示:

const key = crypto.createHmac('sha256', data).digest('hex');

现在,tweetnacl当 key 在 secretbox 中传递时,抛出错误:bad key size:

nacl.secretbox(data, Rnonc, key);

参数被转换为 Uint8Array,因为 secretbox 要求参数为 Uint8Array。

错误:错误的 key 大小是从here抛出的在 tweetnacl 中,因为 crypto_secretbox_KEYBYTES 被定义为 32 here 。问题是从 crypto 返回的 key 不是 32 字节大小。

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

32 separate hexadecimal numbers (or 32 bytes)

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

最佳答案

以下代码片段解决了生成 32 字节 SHA256 哈希值的问题,避免了 tweetnacl.js 引发的错误 key 大小错误:

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 模块,尽管我更喜欢使用 native crypto 模块,但我想我现在只会使用它,因为它是一个可行的解决方案。

感谢@Arihant 指出this (查看评论部分)

关于javascript - 如何使用 nodejs(加密)生成 32 字节的 SHA256 哈希,以避免 tweetnacl.js 抛出错误的 key 大小错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51978889/

相关文章:

javascript - 按下按钮后如何重置错误消息?

javascript - 二进制补码相同的代码 python/JavaScript 不同的结果

javascript - 使用带有 Promise 的多个请求

比较 c 中的哈希值

带有 key 的 Java HmacSHA256

c++ - 下载文件的 CMake 检查哈希 (MD5/SHA256)

javascript - 使用 Oauth-JS 获取 YouTube channel 名称和链接

javascript - Angularjs 基于下拉范围的搜索过滤器

javascript - 如何检查数组元素是否只包含换行符?

node.js - 如何解决npm安装期间的重命名错误