2016-09-16 17 views
1

私のコードの一部をPythonからJavaに移植しようとしていますが、私はほとんどそうではありません。私はPythonですので、Javaに精通しています。私がやろうとしています基本的なことは、ここに示すようにプロセスを複製です: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スタジオを使用しています。

答えて

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

を印刷します
関連する問題