用的是哈希函數,在計算機網絡中應用較多的不可逆加密算法有RSA公司發明的MD5算法和由美國國家技術標準研究所建議的安全散列算法SHA.
算法的應用
MD5的典型應用是對壹段信息(Message)產生信息摘要(Message-Digest),以防止被篡改。比如,在UNIX下有很多軟件在下載的時候都有壹個文件名相同,文件擴展名為.md5的文件,在這個文件中通常只有壹行文本,大致結構如:
MD5 (tanajiya.tar.gz) = 0ca175b9c0f726a831d895e269332461
這就是tanajiya.tar.gz文件的數字簽名。MD5將整個文件當作壹個大文本信息,通過其不可逆的字符串變換算法,產生了這個唯壹的MD5信息摘要。如果在以後傳播這個文件的過程中,無論文件的內容發生了任何形式的改變(包括人為修改或者下載過程中線路不穩定引起的傳輸錯誤等),只要妳對這個文件重新計算MD5時就會發現信息摘要不相同,由此可以確定妳得到的只是壹個不正確的文件。如果再有壹個第三方的認證機構,用MD5還可以防止文件作者的"抵賴",這就是所謂的數字簽名應用。
MD5還廣泛用於加密和解密技術上。比如在UNIX系統中用戶的密碼就是以MD5(或其它類似的算法)經加密後存儲在文件系統中。當用戶登錄的時候,系統把用戶輸入的密碼計算成MD5值,然後再去和保存在文件系統中的MD5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道用戶密碼的明碼的情況下就可以確定用戶登錄系統的合法性。這不但可以避免用戶的密碼被具有系統管理員權限的用戶知道,而且還在壹定程度上增加了密碼被破解的難度。
正是因為這個原因,現在被黑客使用最多的壹種破譯密碼的方法就是壹種被稱為"跑字典"的方法。有兩種方法得到字典,壹種是日常搜集的用做密碼的字符串表,另壹種是用排列組合方法生成的,先用MD5程序計算出這些字典項的MD5值,然後再用目標的MD5值在這個字典中檢索。我們假設密碼的最大長度為8位字節(8 Bytes),同時密碼只能是字母和數字,***26+26+10=62個字符,排列組合出的字典的項數則是P(62,1)+P(62,2)….+P(62,8),那也已經是壹個很天文的數字了,存儲這個字典就需要TB級的磁盤陣列,而且這種方法還有壹個前提,就是能獲得目標賬戶的密碼MD5值的情況下才可以。這種加密技術被廣泛的應用於UNIX系統中,這也是為什麽UNIX系統比壹般操作系統更為堅固壹個重要原因。