2012-03-03 23:11:20|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:Java, 加密/解密|来源:唯设编程网
MD5即Message-Digest Algorithm 5(信息-摘要算法5),是一种用于产生数字签名的单项散列算法,在1991年由MIT Laboratory for Computer Science(IT计算机科学实验室)和RSA Data Security Inc(RSA数据安全公司)的Ronald L. Rivest教授开发出来,经由MD2、MD3和MD4发展而来。MD5算法的使用不需要支付任何版权费用。它的作用是让大容量信息在用数字签名软件签私人密匙前被"压缩"成一种保密的格式(将一个任意长度的“字节串”通过一个不可逆的字符串变换算法变换成一个128bit的大整数,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。)
在 Java 中,java.security.MessageDigest 中已经定义了 MD5 的计算,所以我们只需要简单地调用即可得到 MD5 的128 位整数。然后将此 128 位计 16 个字节转换成 16 进制表示即可。
示例:
package FamilyAsset.Utility.Security;
import java.security.MessageDigest;
/**
* 实现MD5加密算法
*/
public class MD5 {
private final static String[] hexDigits = { // 用来将字节转换成 16 进制表示的字符
"0", "1", "2", "3", "4", "5", "6", "7",
"8", "9", "a", "b", "c", "d", "e", "f" };
/**
* MD5加密算法的具体实现
* @param src 需要加密的字符串
* @return 加密后的结果字符串,32位
*/
public static String getMD5(String src) {
String result=null;
try{
result=new String(src);
MessageDigest md5=MessageDigest.getInstance("MD5");
result=byteArrayToHexString(md5.digest(result.getBytes()));
}catch(Exception err){
err.printStackTrace();
}
return result.toUpperCase();
}
private static String byteArrayToHexString(byte[] digest) {
StringBuffer result=new StringBuffer();
for(int i=0;i<digest.length;i++)
result.append(byteToHexString(digest[i]));
return result.toString();
}
private static String byteToHexString(byte b) {
int n=b;
if(n<0)
n=256+n;
int d1=n/16;
int d2=n%16;
return hexDigits[d1]+hexDigits[d2];
}
}