不同的md5哈希导致Java和JavaScript

时间:2017-09-09 20:55:53

标签: javascript java hash md5 digest

我正在尝试将现有代码从java转换为JavaScript(node.js是特定的)。在两种语言中创建相同String的md5哈希会导致以下不同的结果:

Java Arrays.toString(MessageDigest.getInstance("MD5").digest("test".getBytes()));

返回

  

[9,-113,107,-51,70,33,-45,115,-54,-34,78,-125,38,39,-76,-10]

JS crypto.createHash("md5").update("test", "ascii").digest();

返回

  

[9,143,107,205,70,33,211,115,...]

使用crypto 1.0.1 任何人都可以向我解释这个吗?我已经玩过不同的编码,但它并没有影响结果。

2 个答案:

答案 0 :(得分:3)

您在Java中使用有符号字节。 它实际上是一样的。 我会投票给无符号版本,但是如果你必须与Java版本兼容arr.map(function(e) {return e >= 128 ? e - 256 : e})

答案 1 :(得分:0)

两个哈希都是一样的。由于未签名/签名类型,您看到不同的数字,但它们具有相同的值。尝试将值转换为unsigned。