使用hashlib或其他方法将Java MD5`Java.security.MessageDigest.getInstance(";MD5";)`代码转换为Python2.7

使用hashlib或其他方法将Java MD5`Java.security.MessageDigest.getInstance(";MD5";)`代码转换为Python2.7,java,python-2.7,md5,Java,Python 2.7,Md5,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.MessageDiges

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);
  }
返回:

2fa040f96503fdabf5fd171da1473069
然后在python2.7中,我的代码:

def md5(string):
    m = hashlib.md5()
    m.update(string)
    return m.hexdigest()
相同的输入和返回:

e480188fdf66deeec3d5a2c42094dd73

那么如何编辑我的python代码以获得相同的返回?

仔细查看您的输入字符串
77484747471146665721…
它看起来像是表示ASCII字符的字节值串联在一起的序列:

77 48 48 47 48 48 47 48 48 47 114 66 65 72 ...
将这些转换为字符,我们得到字符串
M00/00/00/rBAHhlxyPkqAYZNjAACfaUt3MY475.jpeg11

计算
M00/00/00/rbahhlxypkqayznjaacfat3my475.jpeg11的MD5散列,我得到
2fa040f96503fdabf5fd171da1473069
。这是Java代码返回的哈希值

另一方面,计算字符串的MD5哈希值
77481146665721…
返回
e48188fdf66deeec3d5a2c42094dd73
。这是Python代码返回的哈希值

我已经能够使用Java代码和Python代码计算这两个哈希值,并在这两个代码中得到相同的结果。要在Java中将字符串转换为
字节
数组,我在字符串上调用了
.getBytes(“UTF-8”)
。(我使用Python3而不是Python2,因此必须插入对
.encode(“utf-8”)
的调用,但这只是一个旁白。)


因此,用于计算MD5哈希的Java和Python代码示例返回不同的结果,因为您传递的是不同的输入数据。

是的,非常感谢。我刚才找到了。在java中,我们应该将byte[]转换为md5,但python没有。
77 48 48 47 48 48 47 48 48 47 114 66 65 72 ...