在各种应用系统中,如果需要设置账户,那么就会涉及到储存用户账户信息的问题,为了保证所储存账户信息的安全,通常会采用MD5加密的方式来,进行储存。
MD5,全称为“Message Digest Algorithm 5”,中文名“消息摘要算法第五版”,它是计算机安全领域广泛使用的一种散列函数,用以提供消息的完整性保护。严格来说,它是一种摘要算法,是确保信息完整性的。不过,在某种意义上来说,也可以算作一种加密算法。
MD5 算法具有很多特点:
压缩性:任意长度的数据,算出的MD5值长度都是固定的。
容易计算:从原数据计算出MD5值很容易。
抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。
弱抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
强抗碰撞:想找到两个不同的数据,使它们具有相同的MD5值,是非常困难的。
但实际上MD5不是一种加密算法,只是一种算法,因为它是一个不可逆的过程,即 MD5 生成消息摘要后是不能通过结果解析得到原来的内容。
MD5在线加密工具:http://tools.jb51.net/password/CreateMD5Password
MD5加密方法之一 java自带jar工具MessageDigest实现
java.security.MessageDigest
import java.math.BigInteger;
import java.security.MessageDigest;
public class md52 {
public static void main(String []args) {
try {
String str = "abc";
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
// 计算md5函数
md.update(str.getBytes("utf-8"));
// digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
// BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
String a = new BigInteger(1, md.digest()).toString(16);
System.out.println(a);
} catch (Exception e) {
}
}
}
//输出结果
//900150983cd24fb0d6963f7d28e17f72
MD5加密方法之二 spring自带的工具DigestUtils实现
org.springframework.util.DigestUtils
// spring自带工具包DigestUtils
System.out.println(DigestUtils.md5DigestAsHex("1234".getBytes()));
//输出结果
// 81dc9bdb52d04dc20036dbd8313ed055
由于MD5不可逆,所以附加一个加密解密算法
public class convertMD5 {
public static String convertMD5(String inStr){
char[] a = inStr.toCharArray();
for (int i = 0; i < a.length; i++){
a[i] = (char) (a[i] ^ 't');
}
String s = new String(a);
return s;
}
/**
* 加密解密算法 执行一次加密,两次解密
*/
// 测试主函数
public static void main(String args[]) {
String s = new String("abc");
System.out.println("原始:" + s);
System.out.println("加密的:" + convertMD5(s));
System.out.println("解密的:" + convertMD5(convertMD5(s)));
}
}
//调试结果
//原始:abc
//加密的:???
//解密的:abc