我有一个 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/