什么是消息摘要函數
在很多軟件的下載頁面的,旁邊都會有md5、sha1之類的鏈接,這個是干什么用的呢?
MongoDB下載頁
我們點開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)、單向散列、哈希函數等名稱。