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

问题描述

我正在尝试与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);

解决方法

您可以返回一个Buffer,对其进行切片以获取前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 =