2016-09-16 159 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==