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

您需要将字节转换为十六进制字符串,而不是直接转换为字符串:

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 转换为字符串。

于 2013-03-18T19:59:40.170 回答