#node.js #hash #sha1 #sha #node-crypto
#node.js #хэш #sha1 #sha #узел-криптография
Вопрос:
Я пытаюсь взаимодействовать с сервером Java. Как часть протокола, мне нужно создать хэш SHA1 моего содержимого. По какой-то причине используются только первые 16 байт хэш-дайджеста, закодированные в Base64. Дайджест сообщения представляет собой массив байтов в Java, и он усекается до длины 16, прежде чем быть закодированным в Base64.
Как я могу сделать то же самое в javascript на узле? Я использую встроенную криптографию узла, но дайджест — это не просто массив. Как я могу получить доступ к значению хэша и получить первые 16 байт? Следующий код дает мне 20 байт:
var crypto = require('crypto');
var hash = crypto.createHash('sha1');
data = hash.update('This is the password', 'utf-8');
gen_hash= data.digest('base64');
console.log(gen_hash);
Ответ №1:
Вместо того, чтобы напрямую генерировать выходные данные в кодировке Base64, вы можете вернуть буфер, нарезать его, чтобы получить первые 16 байт, а затем закодировать его.
const crypto = require('crypto');
var hash = crypto.createHash('sha1');
data = hash.update('This is the password', 'utf-8');
gen_hash= data.digest().slice(0, 16).toString('base64');
console.log(gen_hash);
Буфер хэша выглядит следующим образом перед нарезкой:
<Buffer f2 ff c3 eb 0e 37 bb 19 91 0a 05 c0 88 d2 e6 0d 6a 0e d5 25>
результат:
8v/D6w43uxmRCgXAiNLmDQ ==
ваш исходный код дал:
8v/D6w43uxmRCgXAiNLmDWoO1SU=