Java 和 JavaScript 中不同的 md5 哈希结果
Different md5 hash results in Java and JavaScript
我正在尝试将现有代码从 java 翻译成 JavaScript(具体来说 node.js)。在两种语言中创建相同字符串的 md5 散列会导致以下不同结果:
在JavaArrays.toString(MessageDigest.getInstance("MD5").digest("test".getBytes()));
returns
[9, -113, 107, -51, 70, 33, -45, 115, -54, -34, 78, -125, 38, 39, -76, -10]
在 JS crypto.createHash("md5").update("test", "ascii").digest();
returns
[9, 143, 107, 205, 70, 33, 211, 115, …]
使用加密 1.0.1
谁能给我解释一下?我已经尝试过不同的编码,但这并没有影响结果。
您正在 Java 中使用有符号字节。
其实是一样的。
我会投票给未签名的版本,但如果你必须与 Java 版本兼容,只需 arr.map(function(e) {return e >= 128 ? e - 256 : e})
两个哈希值相同。由于 unsigned/signed 类型,您会看到不同的数字,但它们具有相同的值。尝试将值转换为无符号。
我正在尝试将现有代码从 java 翻译成 JavaScript(具体来说 node.js)。在两种语言中创建相同字符串的 md5 散列会导致以下不同结果:
在JavaArrays.toString(MessageDigest.getInstance("MD5").digest("test".getBytes()));
returns
[9, -113, 107, -51, 70, 33, -45, 115, -54, -34, 78, -125, 38, 39, -76, -10]
在 JS crypto.createHash("md5").update("test", "ascii").digest();
returns
[9, 143, 107, 205, 70, 33, 211, 115, …]
使用加密 1.0.1 谁能给我解释一下?我已经尝试过不同的编码,但这并没有影响结果。
您正在 Java 中使用有符号字节。
其实是一样的。
我会投票给未签名的版本,但如果你必须与 Java 版本兼容,只需 arr.map(function(e) {return e >= 128 ? e - 256 : e})
两个哈希值相同。由于 unsigned/signed 类型,您会看到不同的数字,但它们具有相同的值。尝试将值转换为无符号。