Как сгенерировать хэш 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 за указание на это (проверьте раздел комментариев)

Другие вопросы по тегам