如何在 node.js 中获取 SHA1 散列的前 16 个字节?

How to get first 16 bytes of an SHA1 hash in node.js?

我正在尝试与 Java 服务器进行互操作。作为协议的一部分,我需要为我的内容创建一个 SHA1 散列。出于某种原因,仅使用散列摘要的前 16 个字节,以 Base64 编码。消息摘要是 Java 中的字节数组,在进行 Base64 编码之前被截断为长度 16。

如何在节点上的 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);

您可以 return 缓冲区,将其切片以获取前 16 个字节,然后对其进行编码,而不是直接生成 Base64 编码输出。

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=