javascript - 在 JavaScript 中计算 HMAC : converting from Java

标签 javascript arrays cryptography

我有一个 Java 加密函数,我正在尝试将其转换为 Javascript,但由于某种原因,最终生成的哈希值不一样。

我在 javascript 中使用 crypto,在 Java 中使用 Mac。

Javascript:

    const time = 0,0,0,0,0,8,21,60;
    const signKey = 20,54,50,82;

    const hash = crypto
       .createHmac('sha1', new Buffer(signKey, 'base64'))
       .update(new Buffer(time))
       .digest('hex');

    console.log(`hash ${hash}`);

Java:

    byte[] time = 0,0,0,0,0,8,21,60;
    byte[] signKey = 20,54,50,82;
     SecretKeySpec signKey = new SecretKeySpec(signKey, "HmacSHA1");

    Mac mac;
    mac = Mac.getInstance("HmacSHA1");
    mac.init(signKey);
    byte[] hash = mac.doFinal(time);

Javascript - 输出:

哈希值 = 52,56,48

Java - 输出: 哈希值 = [-47, 30, -1]

我认为我缺少在 Javascript 中转换某些内容,但由于我不熟悉加密货币,所以我不确定。

谢谢!

最佳答案

正如我在 JS 中看到的,您将 signKey 视为 base64 编码的字符串,而在 Java 中则将其视为字节数组。 因此,从 JS 代码中删除“base64”应该会有所帮助。

关于javascript - 在 JavaScript 中计算 HMAC : converting from Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49668700/

相关文章:

javascript - Laravel 在 JavaScript 中的链接

javascript - 每当我单击列表项时,如何打开和关闭类(class)?

c# - 从 C# 中的字符串列表中标记子字符串列表的算法

java - 使用 BouncyCaSTLe 为 java.security.Keystore 生成自签名证书的简单方法

security - 如何计算计算 SHA-256 哈希值所需的时间?

javascript - Sendgrid 入站 webhook 与 Node 和 multer

javascript - jQuery location.reload 在 ajax 成功后发生

c++ - 用 ASCII 空格初始化模板<size_t N> std::array<char, N>?

c - 指向数组的指针

java - Android:我的加密/解密不起作用,我得到奇怪的输出