Как сгенерировать хэш SHA256 из 32 байтов, используя nodejs (crypto), чтобы избежать ошибки неверного размера ключа, генерируемой из tweetnacl.js?
Я использую криптомодуль 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
это бросить отсюда в tweetnacl
так как crypto_secretbox_KEYBYTES
определяется как 32
здесь Проблема в ключе, возвращенном из crypto
имеет размер не 32 байта.
Я искал SO и соответствующие сайты, но не смог найти никакого приемлемого решения, но в соответствии с этим - хеш SHA256, преобразованный в hex, производит:
32 отдельных шестнадцатеричных числа (или 32 байта)
Как я могу сгенерировать ключ SHA256 из 32 байтов, чтобы избежать этой ошибки, используя node.js? Есть ли что-то, что я делаю неправильно при создании хэша SHA256?
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);
Это всегда генерирует Uint8Array
размером 32 байта. Обратите внимание, здесь я должен был использовать crypto-js
модуль, хотя я предпочел использовать родной crypto
модуль, но я думаю, я бы просто использовал его сейчас, поскольку это рабочее решение.
Спасибо @Arihant за указание на это (проверьте раздел комментариев)