2016-07-26 58 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