无法从java md5哈希获得与python md5哈希相同的结果

时间:2016-09-16 01:24:50

标签: java android python hash

我正在尝试将我的一些代码从Python移植到Java,并且由于我不像Java那样熟悉Java,所以它有点粗略开始。我要做的基本事情是复制一个过程,如下所示:

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哈希的hexdigest,而不是我需要的。我已经尝试了很多东西来将这个十六进制转换成我需要获得相同的base64结果,但我没有运气。
有没有什么方法可以帮助我完成这个过程?
请注意,如果重要的话,我正在使用Android Studio。

1 个答案:

答案 0 :(得分:1)

我猜测你在将java字符串传递给摘要之前没有将其转换为正确的编码。我将使用UTF-8,因为它与python将使用的匹配。

结合Base64 Encoding in JavaHow can I generate an MD5 hash?的答案似乎很简单,似乎对我有用:

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==