2016-07-26 61 views
-1

我想知道为什么我的字符串在md5传输后输出......包含许多不可读的字符,比如? 。等等。在这种情况下,下面的代码输出 kh{ j p% 。md5输出问号字符

import java.nio.charset.StandardCharsets; 
import java.security.MessageDigest; 
import java.security.NoSuchAlgorithmException; 



public class Test{ 
    public static void main(String args[]){ 


     try{ 
      MessageDigest md = MessageDigest.getInstance("MD5"); 
      String ssmd5 = "sp00"; 
      String ShipmentID = new String(md.digest(ssmd5.getBytes()), StandardCharsets.UTF_8); 
      System.out.println(ShipmentID); 

     }catch(NoSuchAlgorithmException e){ 
      System.out.println("I'm sorry, but MD5 is not a valid message digest algorithm"); 
     } 



    } 
} 
+3

'MessageDigest.digest'返回'byte []';你试图将它转换为'String',这在逻辑上是'char []'。 'char'和'byte'不是一回事。如果要将其打印为可读的字符串,base64将对字节进行编码(或将字节以十六进制打印)。 –

回答

2

的MD5的输出摘要功能字节二进制序列,而不是可打印字符串。

无法打印原始MD5摘要。

如果要打印摘要的人类可读的表示,则应该将其打印为十六进制或BASE64编码的字符串。

请参阅:How to convert a byte array to a hex string in Java?

+0

谢谢吉姆,我明白了,它解决了我的问题! – michael