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代码以具有相同的返回?
仔细查看您的输入字符串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代码样本正在返回不同的结果,因为您正在传递它们不同的输入数据。