MD5消息摘要算法

维基百科给出的表述:

一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。

将数据(如一段文字)运算变为另一固定长度值,是散列算法的基础原理。

一般128位的MD5散列被表示为32位十六进制数字。以下是一个43位长的仅ASCII字母列的MD5散列:

1
2
MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6

即使在原文中作一个小变化(比如用c取代d)其散列也会发生巨大的变化:

1
2
MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b

应用

  • 热更新:一般客户端会维护一个清单文件,文件内枚举出客户端的所有文件和对应的MD5,一旦检测到客户端的某个文件的MD5值与服务器上的最新的文件的MD5值不同时,就会从服务器上重新下载此文件以替换客户端的旧文件,而实现热更新。更新详细的看这里

  • 现在大部分公司一般不会存储用户的明文密码,而是存储经过MD5处理过后的明文密码的散列值,当下次用户输入自己的密码登录账号时,只需要将这次输入的密码再次经过MD5处理后,和之前的存储的散列值进行对比。就可以知道密码是否正确了。这样即使服务器上的数据泄露,也不会直接暴露用户的明文密码。