gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:15:24 26 4
gpt4 key购买 nike

我正在使用 crypto node.js 的模块来生成这样的 SHA256 哈希:

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

现在,tweetnaclsecretbox 中传递 key 时抛出错误:错误的 key 大小:

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 模块,虽然我更喜欢使用原生的 crypto 模块,但我想我现在就使用它,因为它是一个可行的解决方案.

感谢@Arihant 指向 this (查看评论区)

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com