4

文字列を md5 に変換する単純な関数を作成すると、出力に奇妙な文字が表示されます。文字エンコーディングがめちゃくちゃになっていると思います。私が間違っていることを指摘できますか?

public class App 
{   
public static void main(String[] args){
    String str = "helloWorldhelloWorldhelloWolrd";
    getHash(str);

}

public static void getHash(String str){
    try {
        byte[]  three = str.getBytes("UTF-8");
        MessageDigest   md = MessageDigest.getInstance("MD5");
        byte[] thedigest = md.digest(three);
        String  str1 = new String(thedigest,"UTF-8");
        System.err.println(str1);
    } catch (NoSuchAlgorithmException e) {

        e.printStackTrace();
    }catch (UnsupportedEncodingException e) {

        e.printStackTrace();
    }
}

}

出力: これは私が見るものです

                                n?)?????fC?7
4

2 に答える 2

7

バイトを文字列に直接変換するのではなく、16 進文字列に変換する必要があります。

byte[] thedigest = md.digest(three);
StringBuilder buff = new StringBuilder();
for (byte b : theDigest) {
  String conversion = Integer.toString(b & 0xFF,16);
  while (conversion.length() < 2) {
    conversion = "0" + conversion;
  }
  buff.append(conversion);
}
String str1 = buff.toString();
System.err.println(str1);
于 2013-03-18T19:53:53.007 に答える
2

ダイジェストを文字列として表示することはできません (ゴミに過ぎないため) 何らかの形でバイトを変換して、人間が読める形式で表示できるようにする必要があります。Base64 エンコーダーを提案します。

MD5 を文字列hereに変換する方法について議論している別のスレッドがあります。

于 2013-03-18T19:59:40.170 に答える