Java代码:
public static String md5(byte[] source) throws NoSuchAlgorithmException {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
md.update(source);
byte tmp[] = md.digest();
char str[] = new char[32];
int k = 0;
for (int i = 0; i < 16; i++) {
str[k++] = hexDigits[tmp[i] >>> 4 & 0xf];
str[k++] = hexDigits[tmp[i] & 0xf];
}
return new String(str);
}
然后输入以下代码:
77,48,48,47,48,48,47,48,48,47,114,66,65,72,104,108,120,121,80,107,113,65,89,90,78,106,65,65,67,102,97,85,116,51,77,89,52,55,53,46,106,112,101,103,49,49
返回:
2fa040f96503fdabf5fd171da1473069
然后在python2.7中,我的代码:
def md5(string):
m = hashlib.md5()
m.update(string)
return m.hexdigest()
相同的输入和返回:
e480188fdf66deeec3d5a2c42094dd73
那么如何编辑我的python代码以得到相同的收益?
答案 0 :(得分:1)
仔细观察您的输入字符串774848474848474848471146665721...
,它看起来像是表示ASCII字符的字节值的串联在一起:
77 48 48 47 48 48 47 48 48 47 114 66 65 72 ...
将它们转换为字符,我们得到字符串M00/00/00/rBAHhlxyPkqAYZNjAACfaUt3MY475.jpeg11
。
计算M00/00/00/rBAHhlxyPkqAYZNjAACfaUt3MY475.jpeg11
的MD5哈希,得到2fa040f96503fdabf5fd171da1473069
。这是您的Java代码返回的哈希值。
另一方面,计算字符串774848474848474848471146665721...
的MD5哈希将返回e480188fdf66deeec3d5a2c42094dd73
。这是您的Python代码返回的哈希值。
我已经能够使用您的Java代码和Python代码来计算这两个哈希,并在两者中获得相同的结果。为了在Java中将字符串转换为byte
数组,我在字符串上调用了.getBytes("UTF-8")
。 (我使用的是Python 3而不是Python 2,因此必须插入对.encode("utf-8")
的调用,但这是一个问题。)
因此,用于计算MD5哈希值的Java和Python代码示例返回不同的结果,因为您向它们传递了不同的输入数据。