2016-07-26 8 views
-1

なぜ私の文字列がmd5転送後に出力sthには多くの読み込み不能な文字が含まれているのだろうか? 。等。この場合、下のコードは kh{ j p%outputsを出力します。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'。あなたはそれを論理的に 'char []'である 'String'に変換しようとしています。 'char'と' byte'は同じものではありません。読み込み可能な文字列として印刷したい場合、base64はバイトをエンコードします(またはバイトを16進数で表示します)。 –

答えて

2

MD5ダイジェスト関数の出力は、バイトのバイナリシーケンスではなく、印刷可能な文字列です。

生のMD5ダイジェストを印刷することはできません。

ダイジェストの表現を人間が読める形式で印刷する場合は、16進数またはBASE64エンコード文字列として印刷する必要があります。

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

+0

ジムありがとう、私は理解し、それは私の問題を解決する! – michael

関連する問題