在電腦科學中,雜湊(hashing)的應用幾乎無所不在,而在密碼學中,雜湊函數有其獨有的特殊含義以及必須滿足的性質,因此在接下來的介紹中,可以先暫時忘掉之前學過或聽過有關雜湊的概念
一個 加密雜湊函數(cryptographic hash function) h(x) 必須滿足以下所有條件
我們考慮輸入空間為所有150位元的數字,其大小為 ,欲將其透過雜湊函數產出128位元的數字,其大小為
平均而言,單一個雜湊值會可以反向對回 ,大約四百萬個150位元的數
因此碰撞是一定會發生
雜湊函數的要求是要讓所有的碰撞非常難找到,這看起來似乎很難實現
不過一些很聰明的方法確實能夠找出滿足以上困難要求的函數,因此我們只需要相信這些加密雜湊函數確實存在
著名的雜湊函數有MD5、SHA-1,其設計及計算方式都很複雜,我們只需知道他們都很有名,並且可以達成以上所述的加密雜湊函數性質
這個網站 可以提供線上計算雜湊值,並同時提供MD5和SHA-1的計算結果
比如我將這段文字以上的文章內容複製,到這個網站 可以計算文字的大小約莫為4KB=4000個位元組=32000位元
其生成的MD5如下:3a3fa84938f60adb79e2654f0ce4b3ac
生成的SHA-1如下:d3dc6ca295901d4e1cd9aaa65ef112982ad620e6
兩者皆是以16進位表示的數字
我們可以至數字轉換將兩個結果轉換至二進位表示,檢查其雜湊值輸出的位元
128位元的MD5:00111010001111111010100001001001001110001111011000001010110110110111100111100010011001010100111100001100111001001011001110101100
160位元的SHA-1:1101001111011100011011001010001010010101100100000001110101001110000111001101100110101010101001100101111011110001000100101001100000101010110101100010000011100110
可以看到320000位元的字串可以在極短的時間壓縮至128或160位元,各位可以試試壓縮更大容量的輸入值
由於SHA-1的雜湊值位元較多,因此某種意義上來說比MD5要來得安全,不過相對而言其計算量也比MD5大