Я использую crypto модуль 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, преобразованный в шестнадцатеричный, дает:
32 отдельных шестнадцатеричных числа (или 32 байта)
Как я могу сгенерировать ключ SHA256 размером 32 байта, чтобы избежать этой ошибки с помощью node.js? Есть ли что-то, что я делаю неправильно при создании хэша SHA256?
const key = crypto.createHmac('sha256', data).digest('base64');
Также попробуйте распечатать ключ внутри функции и попробовать обработать его локально один раз. - person Arihant   schedule 23.08.2018crypto.createHmac('sha256', data).digest('base64')
, все равно получаюbad key size
- person Abrar   schedule 23.08.2018checkLengths
. Не могли бы вы указать строку, где вы получаете эту ошибку? - person Arihant   schedule 23.08.2018cosole.log(k); cosole.log(k.length);
внутри функции и посмотреть, что такое k? Вы можете получить ключ.. - person Arihant   schedule 23.08.2018key
я получаю массивUint8Array
в качестве вывода, подобный этому[98, 87, 122, 87, 77, 111, 83, 43, 83, 107, 101, 54, 101, 117, 120, 75, 78....
, длиной44
. Любая идея, как я могу преобразовать его в 32 байта? - person Abrar   schedule 23.08.2018