1. 程式人生 > >到底什麼是hash 它起什麼作用

到底什麼是hash 它起什麼作用

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                 從emule誕生到現在也已經有了兩年左右時間了,隨著emule的普及,喜歡他的人也越來越多,但是由於emule對技術相應有一個門檻,不像bt那麼容易上手,所以很多朋友很長時間以來一直都有這樣或那樣的疑問,今天是週末我也獻獻醜,寫一篇關於hash的文章。

大家天天都在使用emule,hash這個詞是在emule裡面出現頻率最高的,那麼到底什麼是hash呢?

讓我們先來了解一些基本知識,作作預熱只有這樣才能更好的瞭解hash。

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)是 Rivest 於1991年對MD4的改進版本。它對輸入仍以512位分組,其輸出是4個32位字的級聯,與 MD4 相同。MD5比MD4來得複雜,並且速度較之要慢一點,但更安全,在抗分析和抗差分方面表現更好

3) SHA1 及其他
SHA1是由NIST NSA設計為同DSA一起使用的,它對長度小於264的輸入,產生長度為160bit的雜湊值,因此抗窮舉(brute-force)性更好。SHA-1 設計時基於和MD4相同原理,並且模仿了該演算法。

那麼這些Hash演算法到底有什麼用呢?
Hash演算法在資訊保安方面的應用主要體現在以下的3個方面:

1) 檔案校驗
我們比較熟悉的校驗演算法有奇偶校驗和CRC校驗,這2種校驗並沒有抗資料篡改的能力,它們一定程度上能檢測並糾正資料傳輸中的通道誤碼,但卻不能防止對資料的惡意破壞。
MD5 Hash演算法的"數字指紋"特性,使它成為目前應用最廣泛的一種檔案完整性校驗和(Checksum)演算法,不少Unix系統有提供計算md5 checksum的命令。
2) 數字簽名
Hash 演算法也是現代密碼體系中的一個重要組成部分。由於非對稱演算法的運算速度較慢,所以在數字簽名協議中,單向雜湊函式扮演了一個重要的角色。 對 Hash 值,又稱"數字摘要"進行數字簽名,在統計上可以認為與對檔案本身進行數字簽名是等效的。而且這樣的協議還有其他的優點。
3) 鑑權協議
如下的鑑權協議又被稱作"挑戰--認證模式:在傳輸通道是可被偵聽,但不可被篡改的情況下,這是一種簡單而安全的方法。

以上就是一些關於hash以及其相關的一些基本預備知識。那麼在emule裡面他具體起到什麼作用呢?

什麼是檔案的hash值呢?

大家都知道emule是基於P2P (Peer-to-peer的縮寫,指的是點對點的意思的軟體), 它採用了“多原始檔傳輸協議”(MFTP,the Multisource FileTransfer Protocol)。在協議中,定義了一系列傳輸、壓縮和打包還有積分的標準,emule 對於每個檔案都有md5-hash的演算法設定,這使得該檔案獨一無二,並且在整個網路上都可以追蹤得到。

MD5-Hash-檔案的數字文摘通過Hash函式計算得到。不管檔案長度如何,它的Hash函式計算結果是一個固定長度的數字。與加密演算法不同,這一個Hash演算法是一個不可逆的單向函式。採用安全性高的Hash演算法,如MD5、SHA時,兩個不同的檔案幾乎不可能得到相同的Hash結果。因此,一旦檔案被修改,就可檢測出來。

當我們的檔案放到emule裡面進行共享釋出的時候,emule會根據hash演算法自動生成這個檔案的hash值,他就是這個檔案唯一的身份標誌,它包含了這個檔案的基本資訊,然後把它提交到所連線的伺服器。當有他人想對這個檔案提出下載請求的時候, 這個hash值可以讓他人知道他正在下載的檔案是不是就是他所想要的。尤其是在檔案的其他屬性被更改之後(如名稱等)這個值就更顯得重要。而且伺服器還提供了,這個檔案當前所在的使用者的地址,埠等資訊,這樣emule就知道到哪裡去下載了.

一般來講我們要搜尋一個檔案,emule在得到了這個資訊後,會向被新增的伺服器發出請求,要求得到有相同hash值的檔案。而伺服器則返回持有這個檔案的使用者資訊。這樣我們的客戶端就可以直接的和擁有那個檔案的使用者溝通,看看是不是可以從他那裡下載所需的檔案。

對於emule中檔案的hash值是固定的,也是唯一的,它就相當於這個檔案的資訊摘要,無論這個檔案在誰的機器上,他的hash值都是不變的,無論過了多長時間,這個值始終如一,當我們在進行檔案的下載上傳過程中,emule都是通過這個值來確定檔案。

那麼什麼是userhash呢?

道理同上,當我們在第一次使用emule的時候,emule會自動生成一個值,這個值也是唯一的,它是我們在emule世界裡面的標誌,只要你不解除安裝,不刪除config,你的userhash值也就永遠不變,積分制度就是通過這個值在起作用,emule裡面的積分儲存,身份識別,都是使用這個值,而和你的id和你的使用者名稱無關,你隨便怎麼改這些東西,你的userhash值都是不變的,這也充分保證了公平性。其實他也是一個資訊摘要,只不過儲存的不是檔案資訊,而是我們每個人的資訊。

那麼什麼是hash檔案呢?

我們經常在emule日至裡面看到,emule正在hash檔案,這裡就是利用了hash演算法的檔案校驗性這個功能了,文章前面已經說了一些這些功能,其實這部分是一個非常複雜的過程,目前在ftp,bt等軟體裡面都是用的這個基本原理,emule裡面是採用檔案分塊傳輸,這樣傳輸的每一塊都要進行對比校驗,如果錯誤則要進行重新下載,這期間這些相關資訊寫入met檔案,直到整個任務完成,這個時候part檔案進行重新命名,然後使用move命令,把它傳送到incoming檔案裡面,然後met檔案自動刪除,所以我們有的時候會遇到hash檔案失敗,就是指的是met裡面的資訊出了錯誤不能夠和part檔案匹配,另外有的時候開機也要瘋狂hash,有兩種情況一種是你在第一次使用,這個時候要hash提取所有檔案資訊,還有一種情況就是上一次你非法關機,那麼這個時候就是要進行排錯校驗了。


關於hash的演算法研究,一直是資訊科學裡面的一個前沿,尤其在網路技術普及的今天,他的重要性越來越突出,其實我們每天在網上進行的資訊交流安全驗證,我們在使用的作業系統金鑰原理,裡面都有它的身影,特別對於那些研究資訊保安有興趣的朋友,這更是一個開啟資訊世界的鑰匙,他在hack世界裡面也是一個研究的焦點           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述