1. 程式人生 > >MD5 (Message Digest Algorithm 5 資訊—摘要演算法5 ) 的一些體會 .

MD5 (Message Digest Algorithm 5 資訊—摘要演算法5 ) 的一些體會 .

MD5 (Message Digest  Algorithm 5 資訊—摘要演算法5 ) 的一些體會

一、若我們定義一個函式 ,原型為: 

String  MD5 ( Information info)

其中Information 表示任意長度的資訊,注意是任意長度的。

實現這個函式的最終要求:

1、對於不同的輸入資訊,產生的返回值 結果相同 且必須唯一

2. 改演算法不可逆轉,也就是就算擁有 返回結果和演算法細節,也不可能推匯出輸入的初始資訊。

下面是MD5演算法對一些特定值產生的返回值:

md5 ("") = d41d8cd98f00b204e9800998ecf8427e
   

md5 ("a") = 0cc175b9c0f1b6a831c399e269772661
   
md5 ("abc") = 900150983cd24fb0d6963f7d28e17f72
   
md5 ("message digest") = f96b697d7cb7938d525a2f31aaf161d0
   
md5 ("abcdefghijklmnopqrstuvwxyz") = c3fcd3d76192e4007dfb496cca67e13b
      md5("abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz0123456789")

=d174ab98d277d9f5a5611c2c9f419d9f                md5("12345678901234567890123456789012345678901234567890123456789012345678901234567890")  = 57edf4a22be3c955ac49da2e2107b67a 

     對於第二個要求,就是說,給你 一個 32位的字串d41d8cd98f00b204e9800998ecf8427e,如果不事先告訴你,那你一輩子都別想得出它的輸入資訊是 一個空白字元。

二、一些典型的應用。

   1. 對一段資訊(message)產生資訊摘要(message-digest),以防止被篡改。比如,在unix下有很多軟體在下載的時候都有一個檔名相同,副檔名為.md5的檔案,在這個檔案中通常只有一行文字,大致結構如:

   md5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
  這就是tanajiya.tar.gz檔案的數字簽名。md5將整個檔案當作一個大文字資訊,通過其不可逆的字串變換演算法,產生了這個唯一的md5資訊摘要。如果在以後傳播這個檔案的過程中,  無論檔案的內容發生了任何形式的改變(包括人為修改或者下載過程中線路不穩定引起的傳輸錯誤等),只要你對這個檔案重新計算md5時就會發現資訊摘要不相同,由此可以確定你得到的只是一個不正確的檔案。  

    2.防止抵賴。這需要有第三方權威機構的參與。A 寫了個檔案,權威機構對改檔案用MD5演算法產生摘要資訊做好記錄。若以後A說這檔案不是我寫的,權威機構只需對改檔案重新產生摘要資訊跟記錄在冊的摘要資訊進行比對,相同的話,就證明是A寫的了。這就是所謂的“數字簽名”了。

   3. 加密資訊。比如在unix系統中使用者的密碼就是以md5(或其它類似的演算法)經加密後儲存在檔案系統中。當用戶登入的時候,系統把使用者輸入的密碼計算成md5值,然後再去和儲存在檔案系統中的md5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。這不但可以避免使用者的密碼被具有系統管理員許可權的使用者知道,而且還在一定程度上增加了密碼被破解的難度。