2011-12-14 54 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个字符。没有众所周知的编码是每字节一个字符。