MD5加密与使用

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
11
import 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

------ 本文完 ------