MD5即Message-Digest Algorithm 5(信息-摘要算法5),用于确保信息传输完整一致,是计算机广泛使用的杂凑算法之一(又译摘要算法、哈希算法)。
简单的说MD5就是一种加密算法,可以将一个字符串、文件或者压缩包,执行MD5加密后, 生成一个固定长度为128bit的字符串。
主流编程语言都普遍已有MD5实现。除了MD5以外,还有sha-1、RIPEMD以及Haval等加密方式可以实现类似功能。
MD5的作用举例
- 用于保护密码:密码经过MD5加密后再保存在数据库,保证密码的安全性。
- 防止文件被‘篡改’:对一个文件生成MD5值,文件在传播或下载后,重新对文件进行MD5加密生成新的字符串,如果该新字符串和原来的MD5值不一样了,则说明文件被修改过。
MD5的特点:
- 压缩性:任意长度的数据,算出的MD5值长度都是固定的;
MD5到底多长?md5的长度,默认为128bit,也就是128个0和1的二进制串。这种表示方式不是很友好,通常转成16进制表示,因为每4个bit表示一个16进制,所以128/4 = 32 换成16进制表示后,为32位了。
网上也有一些md5是16位的,只是将32位MD5码去掉了前8位以及后8位。如下图所示
- 容易计算:从原数据计算出MD5值很容易;
- 抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别;
- 强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的;
M5的使用
可以直接使用commons-codec的工具类:1
2
3
4
5
6
7
8
9
10
11import org.apache.commons.codec.digest.DigestUtils;
public class MD5Test {
public static void main(String[] args) {
String source = "中国";
String encode = DigestUtils.md5Hex(source);
System.out.println("========>" + encode);
}
}
输出:1
========>c13dceabcb143acd6c9298265d618a9f