2016-09-16 157 views
1

我试图将我的一些代码从Python移植到Java,并且由于我几乎不像熟悉Java,因为我是Python。我试图做的基本的东西是复制的过程如下所示:无法从Java md5哈希得到相同的结果作为python md5哈希

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

我猜你没有将你的java字符串转换为正确的编码,然后再通过摘要。我将使用UTF-8,因为它与python将使用的匹配。

组合来自Base64 Encoding in JavaHow can I generate an MD5 hash?的答案似乎很simpleand似乎为我工作:

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