簡體   English   中英

如何使用 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 的加密模塊來生成這樣的 SHA256 哈希:

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

現在, tweetnacl會拋出錯誤:當密鑰在secretbox傳遞時錯誤的bad key size

nacl.secretbox(data, Rnonc, key);

參數被轉換為 Uint8Array,因為secretbox要求參數為 Uint8Array。

錯誤:由於crypto_secretbox_KEYBYTES在此處定義為32crypto_secretbox_KEYBYTEStweetnacl此處拋出錯誤的bad key size 問題是從crypto返回的密鑰不是 32 字節大小。

我搜索了 SO 和相關網站,但找不到任何可行的解決方案,但根據- 轉換為十六進制的 SHA256 哈希產生:

32 個獨立的十六進制數(或 32 個字節)

如何使用 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 指出這一點(查看評論部分)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM