什么是消息摘要函数
在很多软件的下载页面的,旁边都会有md5、sha1之类的链接,这个是干什么用的呢?
我们点开md5看一下:
a35f264d18e8b2907a5c7cda339e2ca4 mongodb-osx-ssl-x86_64-debugsymbols-v3.4-latest.tgz
左边的16进制字符串是后面文件的MD5消息摘要值。
这个值的作用是用来防止下载出现错误,或者文件被篡改。
在下载mongodb-osx-ssl-x86_64-debugsymbols-v3.4-latest.tgz完成后
我在终端用下面命令计算下文件的MD5值
$ md5 mongodb-osx-ssl-x86_64-debugsymbols-v3.4-latest.tgz
MD5 (/Users/yang/mongodb-osx-ssl-x86_64-debugsymbols-v3.4-latest.tgz) = a35f264d18e8b2907a5c7cda339e2ca4
看到我们计算出的MD5值和网站上的相同,表明这个文件被正确下载了。
MD5值就是根据文件或消息生成一个128位二进制值,用十六进制表示,就是32位16进制字符串。文件有一个字节的改动,算出的MD5就会变化。想找到两组不同的消息对应相同的MD5是非常困难的。
后面的sha1和sha512生成的消息摘要值更长,如下表所示:
消息摘要算法 | 输入长度 | 摘要长度 |
---|---|---|
MD5 | 无限制 | 128位 |
SHA-1 | 无限制 | 160位 |
SHA-224 | 无限制 | 224位 |
SHA-256 | 无限制 | 256位 |
SHA-384 | 无限制 | 384位 |
SHA-512 | 无限制 | 512位 |
SHA3-224 | 无限制 | 224位 |
SHA3-256 | 无限制 | 256位 |
SHA3-384 | 无限制 | 384位 |
SHA3-512 | 无限制 | 512位 |
SHA-224,SHA-256,SHA-384和SHA-512统称SHA-2;
SHA3-224,SHA3-256,SHA3-384,SHA3-512统称SHA-3。
消息摘要函数的用途
1. 文件校验、防止文件或信息被篡改
前文说过,想找到两组不同的消息对应相同的MD5是非常困难的,其它摘要长度长度的算法则更加安全。
2. 用于数字签名
数字签名的本质是要使用不对称秘钥算法,用于处理太长的消息是不现实的,一般采用先进行消息摘要,再进行数字签名。
消息摘要算法的安全性
MD5和SHA-1已经没那么安全,用于安全用途最好使用SHA-2算法或者SHA-3算法。
消息摘要的其它名称
消息摘要(Message Digest)又有数字摘要(Digital Digest)、单向散列、哈希函数等名称。