我正在尝试将现有代码从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 任何人都可以向我解释这个吗?我已经玩过不同的编码,但它并没有影响结果。
答案 0 :(得分:3)
您在Java中使用有符号字节。
它实际上是一样的。
我会投票给无符号版本,但是如果你必须与Java版本兼容arr.map(function(e) {return e >= 128 ? e - 256 : e})
答案 1 :(得分:0)
两个哈希都是一样的。由于未签名/签名类型,您看到不同的数字,但它们具有相同的值。尝试将值转换为unsigned。