D 的个人博客

全职做开源,自由职业者

  menu

实现MD5序列的生成[Java]



/**
 * 文件名:GenMD5.java 
 * 环境: GNU/Linux Ubuntu 7.04 + Eclipse 3.2 + JDK 1.6
 * 功能:从String生成MD5序列
 * 版本:0.0.1.0
 * 作者:88250 
 * 日期:2007.5.10
 * E-mail & MDN: DL88250@gmail.com 
 * QQ:845765
 
*/

import java.security.MessageDigest;

public class GenMD5
{
    
public static void main(String[] args)
    {
    System.out.println(compute(
"Test!"));
    }

    
/**
     * Computes the MD5 fingerprint of a string.
     * 
     * 
@return the MD5 digest of the input <code>String</code>
     
*/
    
public static String compute(String inStr)
    {
    
// convert input String to a char[]
    
// convert that char[] to byte[]
    
// get the md5 digest as byte[]
    
// bit-wise AND that byte[] with 0xff
    
// divpend "0" to the output StringBuffer to make sure that we don't end
    
// up with
    
// something like "e21ff" instead of "e201ff"
    MessageDigest md5 = null;
    
try
    {
        md5 
= MessageDigest.getInstance("MD5");
    }
    
catch (Exception e)
    {
        System.out.println(e.toString());
        e.printStackTrace();
        
return "";
    }
    
char[] charArray = inStr.toCharArray();
    
byte[] byteArray = new byte[charArray.length];

    
for (int i = 0; i < charArray.length; i++)
    {
        byteArray[i] 
= (byte) charArray[i];
    }
    
    
byte[] md5Bytes = md5.digest(byteArray);

    StringBuffer hexValue 
= new StringBuffer();

    
for (int i = 0; i < md5Bytes.length; i++)
    {
        
int val = ((int) md5Bytes[i]) & 0xff;
    
        
if (val < 16)
        {
        hexValue.append(
"0");
        }
        hexValue.append(Integer.toHexString(val));
    }

    
return hexValue.toString();
    }
}