2011-12-14 61 views
1

我已經創建了MD5散列。它現在工作正常。我想輸出16個字符。當前代碼返回32個字符。在Java中生成MD5散列 - 輸出16個字符

這是我的代碼:

try { 
      String text = "Hello World"; 
      MessageDigest msg = MessageDigest.getInstance("MD5"); 
      msg.update(text.getBytes(), 0, text.length()); 
      String digest1 = new BigInteger(1, msg.digest()).toString(16); 
      System.out.println("MD5: " + digest1.length()); 
      System.out.println("MD5: " + digest1); 
     } catch (NoSuchAlgorithmException ex) { 
      Logger.getLogger(AndroidActivationView.class.getName()).log(Level.SEVERE, null, ex); 
     } 

,我想改變它。

我怎樣才能得到16個字符的輸出。

在此先感謝;

+3

呃... MD5是一個128位散列,也就是說,16個字節。它可以用32個十六進制字符表示。你想將原始數據作爲ASCII字符串嗎? – Ryan 2011-12-14 04:41:48

回答

5

剪切的字符串長度:digest1 = digest1.substring(0, 16);

MD5輸出16個字節。如果你用十六進制編碼它的32個字符。如果你用base-64編碼,它是24個字符。 Base-85會將它壓縮成20個字符。沒有衆所周知的編碼是每字節一個字符。