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]; } }