无法从Java MD5哈希和Python MD5哈希中获得相同的结果

3

我正在尝试将一些Python代码移植到Java,但是由于我对Java不像对Python那么熟悉,所以开始有点困难。我的基本目标是复制这里展示的一个过程:

import hashlib
myVar = hashlib.md5("Test")
#Which is'\x0c\xbcf\x11\xf5T\x0b\xd0\x80\x9a8\x8d\xc9Za['
#Then proceed to do base64 encoding
base64.encodestring(myVar)
#Which then gives the output of 'DLxmEfVUC9CAmjiNyVphWw==\n'

然而,我在Java中无法复制此过程,因为我找到的每种方法都给我md5哈希的十六进制摘要,而不是我需要的内容。我尝试了许多方法将该十六进制转换回我需要的内容以获得相同的base64结果,但是我没有成功。
是否有任何方法可以帮助我完成这个过程?
请注意,如果有影响的话,我正在使用Android Studio。
1个回答

2
我猜想您在通过摘要之前没有将Java字符串转换为正确的编码格式。我将使用UTF-8,因为它匹配Python使用的编码格式。
结合 Java中的Base64编码如何生成MD5哈希 的答案似乎很简单并且对我有效。
import java.security.MessageDigest;
import org.apache.commons.codec.binary.Base64;

public class md5test {
    public static void main(String[] args) throws Exception {

        String yourString = "Test";
        byte[] bytesOfMessage = yourString.getBytes("UTF-8");

        MessageDigest md = MessageDigest.getInstance("MD5");
        byte[] thedigest = md.digest(bytesOfMessage);

        byte[] encodedBytes = Base64.encodeBase64(thedigest);
        System.out.println("encodedBytes " + new String(encodedBytes));
    }
}

它打印出encodedBytes DLxmEfVUC9CAmjiNyVphWw==


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接