【问题标题】:How to get first 16 bytes of an SHA1 hash in node.js?如何在 node.js 中获取 SHA1 哈希的前 16 个字节?
【发布时间】:2020-12-22 21:49:56
【问题描述】:

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

【问题讨论】:

    标签: node.js hash sha1 sha node-crypto


    【解决方案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);
    

    hash的Buffer在切片前是这样的:

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

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 1970-01-01
      • 2021-01-11
      • 2016-10-12
      • 1970-01-01
      • 2018-08-03
      • 2011-11-20
      • 2011-03-11
      • 1970-01-01
      相关资源
      最近更新 更多