hash,一般翻譯做「雜湊」,也有直接音譯為"雜湊"的,就是把任意長度的輸入(又叫做預對映, pre-image),通過雜湊演算法,變換成固定長度的輸出,該輸出就是雜湊值。這種轉換是一種壓縮對映,也就是,雜湊值的空間通常遠小於輸入的空間,不同的輸入可能會雜湊成相同的輸出,而不可能從雜湊值來唯一的確定輸入值。
簡單的說就是一種將任意長度的訊息壓縮到某一固定長度的訊息摘要的函式。
hash主要用於資訊保安領域中加密演算法,他把一些不同長度的資訊轉化成雜亂的128位的編碼裡,叫做hash值. 也可以說,hash就是找到一種資料內容和資料存放位址之間的對映關係
了解了hash基本定義,就不能不提到一些著名的hash演算法,md5 和 sha1 可以說是目前應用最廣泛的hash演算法,而它們都是以 md4 為基礎設計的。那麼他們都是什麼意思呢?
這裡簡單說一下:
1) md4
md4(rfc 1320)是 mit 的 ronald l. rivest 在 1990 年設計的,md 是 message digest 的縮寫。它適用在32位字長的處理器上用高速軟體實現--它是基於 32 位運算元的位操作來實現的。
2) md5
md5(rfc 1321)的全稱是message-digest algorithm 5,在90年代初由mit的電腦科學實驗室和rsa data security inc發明,經md2、md3和md4發展而來。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 md4 相同。md5比md4來得複雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好。
message-digest泛指位元組串(message)的hash變換,就是把乙個任意長度的位元組串變換成一定長的大整數。請注意我使用了「位元組串」而不是「字串」這個詞,是因為這種變換只與位元組的值有關,與字符集或編碼方式無關。
md5將任意長度的「位元組串」變換成乙個128bit的大整數,並且它是乙個不可逆的字串變換演算法,換句話說就是,即使你看到源程式和演算法描述,也無法將乙個md5的值變換回原始的字串,從數學原理上說,是因為原始的字串有無窮多個,這有點象不存在反函式的數學函式。
基於以上原因,md5並不是加密演算法,因為不存在相應的解密演算法(要破解只能採取暴力列舉)。
md5的典型應用如下
1、防止被篡改:
2、防止直接看到明文:
現在很多**在資料庫儲存使用者的密碼的時候都是儲存使用者密碼的md5值。這樣就算不法分子得到資料庫的使用者密碼的md5值,也無法知道使用者的密碼(其實這樣是不安全的,後面我會提到)。(比如在unix系統中使用者的密碼就是以md5(或其它類似的演算法)經加密後儲存在檔案系統中。當使用者登入的時候,系統把使用者輸入的密碼計算成md5值,然後再去和儲存在檔案系統中的md5值進行比較,進而確定輸入的密碼是否正確。通過這樣的步驟,系統在並不知道使用者密碼的明碼的情況下就可以確定使用者登入系統的合法性。這不但可以避免使用者的密碼被具有系統管理員許可權的使用者知道,而且還在一定程度上增加了密碼被破解的難度。)
3、防止抵賴(數字簽名):
這需要乙個第三方認證機構。例如a寫了乙個檔案,認證機構對此檔案用md5演算法產生摘要資訊並做好記錄。若以後a說這檔案不是他寫的,權威機構只需對此檔案重新產生摘要資訊,然後跟記錄在冊的摘要資訊進行比對,相同的話,就證明是a寫的了。這就是所謂的「數字簽名」。
3) sha1 及其他
sha1是由nist nsa設計為同dsa一起使用的,它對長度小於264的輸入,產生長度為160bit的雜湊值,因此抗窮舉(brute-force)性更好。sha-1 設計時基於和md4相同原理,並且模仿了該演算法。sha-1是由美國標準技術局(nist)頒布的國家標準,是一種應用最為廣泛的hash函式演算法,也是目前最先進的加密技術,被**部門和私營業主用來處理敏感的資訊。而sha-1基於md5,md5又基於md4。
什麼是crc
crc的全稱為cyclic redundancy check,中文名稱為迴圈冗餘校驗。它是一類重要的線性分組碼,編碼和解碼方法簡單,檢錯和糾錯能力強,在通訊領域廣泛地用於實現差錯控制。實際上,除資料通訊外,crc在其它很多領域也是大有用武之地的。例如我們讀軟盤上的檔案,以及解壓乙個zip檔案時,偶爾會碰到「bad crc」錯誤,由此它在資料儲存方面的應用可略見一斑。
那麼這些hash演算法到底有什麼用呢?
hash演算法在資訊保安方面的應用主要體現在以下的3個方面:
1) 檔案校驗
我們比較熟悉的校驗演算法有奇偶校驗和crc校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。
md5 hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(checksum)演算法,不少unix系統有提供計算md5 checksum的命令。
2) 數字簽名
hash 演算法也是現代密碼體系中的乙個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了乙個重要的角色。 對 hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3) 鑑權協議
如下的鑑權協議又被稱作"挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。
當然,hash函式並不是完全可靠,不同檔案產生相同md5和sha1的機率還是有的,只是不高,在我們論壇裡提供的系統光碟,你想對這麼幾個檔案存在相同hash的不同檔案根本是不可能的。
論壇msdn版塊,提供的就是微軟發布msdn提供給程式設計師研究的windows系統的映象的hash值——sha-1,不提供md5因為微軟只提供了 sha1。而論壇發布區發布的映象是和這些值對應的映象,你校驗自己的映象的hash和msdn資訊區相應版本的sha-1對應的上,說明你手中的光碟是微軟通過msdn發布的原盤。對不上還存在屬於零售或通過銷售渠道發布的映象的可能。畢竟msdn只是微軟發布系統光碟的乙個途徑,msdn只是給程式開發人員研究用的。
尋求原版的證實,對應sha-1和md5外,crc的認證也是乙個很重要的因素,crc同樣是校驗檔案的完整性,還有cdimge的封裝版本。
校驗和計算
unsigned int cal crc unsigned char ptr,unsigned char len 余式crc乘以2再求crc else crc 2 if ptr i 0 crc 0x1021 再加上本位的crc ptr return crc 按位計算crc雖然 簡單,所占用的記憶體比...
校驗和總結
1 ip校驗和只校驗20位元組的ip報頭,並不會計算資料部分的校驗和。因為ip也是不可靠,盡最大努力投遞。2 icmp校驗和覆蓋整個報文 icmp報頭 icmp資料 3 udp和tcp校驗和不僅覆蓋整個報文 頭部 資料 而且還有12位元組的ip偽首部,其中 包括源ip位址 4位元組 目的ip位址 4...
校驗和演算法
校驗和演算法 經常看計算機網路相關的書時,每次看到關於ip或者是udp報頭校驗和時,都是一笑而過,以為相當簡單的東西,不就是16bit資料的相加嗎!最近在學習ping命令的源待時,看到裡面有關於校驗和的演算法。一頭霧水,後來查詢資料,看到校驗和是16bit字的二進位制反碼和。總是覺得很奇怪,為什麼會...