Как получить первые 16 байт хэша SHA1 в node.js ?

#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=