维基百科给出的表述:
一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。
将数据(如一段文字)运算变为另一固定长度值,是散列算法的基础原理。
一般128位的MD5散列被表示为32位十六进制数字。以下是一个43位长的仅ASCII字母列的MD5散列:
1 | MD5("The quick brown fox jumps over the lazy dog") |
即使在原文中作一个小变化(比如用c取代d)其散列也会发生巨大的变化:
1 | MD5("The quick brown fox jumps over the lazy cog") |
应用
热更新:一般客户端会维护一个清单文件,文件内枚举出客户端的所有文件和对应的MD5,一旦检测到客户端的某个文件的MD5值与服务器上的最新的文件的MD5值不同时,就会从服务器上重新下载此文件以替换客户端的旧文件,而实现热更新。更新详细的看这里
现在大部分公司一般不会存储用户的明文密码,而是存储经过MD5处理过后的明文密码的散列值,当下次用户输入自己的密码登录账号时,只需要将这次输入的密码再次经过MD5处理后,和之前的存储的散列值进行对比。就可以知道密码是否正确了。这样即使服务器上的数据泄露,也不会直接暴露用户的明文密码。