MD5加密及简单实现(Java)
在自己学习的项目中需要用到对用户密码进行不可逆加密,保证用户账号的安全性,写此文记此次MD5的加密算法的简单实现。
什么是MD5
MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致,是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法),如今主流的编程语言普遍已有MD5的实现。
杂凑算法的基础原理是:将数据(如汉字)运算为另一固定长度值。
MD5加密的特点
- 压缩性:针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常32位的16进制字符串);
- 加密不可逆:其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。
- 容易计算:从原数据计算出MD5值很容易。
- 抗修改:对于一个固定的字符串。数字等等,MD5加密后的字符串是固定的,也就是说不管MD5加密多少次,都是同样的结果。而如果修改其中一个字节,得到的MD5值都很有很大变化。
- 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
基于MD5的以上特点,它常作为用户密码和其他一些适用不可逆加密的重要数据的加密处理算法。
对字符串进行MD5加密
1、简单实现,不做处理
/**
* 对字符串进行MD5加密
* @param str 需要进行加密的字符串
* @return md5加密后的字符串
*/
public String pwByMD5(String str){
try {
// 生成一个MD5加密计算摘要
MessageDigest md = MessageDigest.getInstance("MD5");
//调用md5函数计算
md.update(str.getBytes());
/**
* digest()最后确定返回md5 hash值,返回值为8位字符串。
* BigInteger函数则将8位的字符串转换成16位hex值,以字符串表示;
* 一个byte是八位二进制,即2位十六进制字符(2的8次方等于16的2次方)
*/
return new BigInteger(1,md.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
return null;
}
}
以上是对MD5算法的简单实现和笔记,后续如有对该算法有更进一步、深层的实现处理,会再更新……