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

2021-08-25 23:46:43 字數 2440 閱讀 7827

從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 於2023年對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結果。因此,一旦檔案被修改,就可檢測出來。

那麼什麼是userhash呢?

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

那麼什麼是hash檔案呢?

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

volatile到底起什麼作用?

預設情況下,內存在讀寫時會同時重新整理至快取 暫存器,那麼下次再使用這個變數時,就會從快取 寄存中讀取,加快了速度。但是在多執行緒時,每個cpu的每個核心有自己的快取,當改變記憶體值時,可能其他核心不知道這個改變,仍在使用自己的快取值,就造成了錯誤。volatile標記這個記憶體不會被快取,從而其他...

配置是起什麼作用

請問乙個web專案web.xml的配置中配置是起什麼作用的 1.啟動乙個web專案的時候,容器 如 tomcat 會去讀它的配置檔案web.xml.讀兩個節點 和 2.緊接著,容器建立乙個servletcontext 上下文 這個web專案所有部分都將共享這個上下文.3.容器將轉化為鍵值對,並交給s...

C 用委託有什麼好處? 它起什麼作用?

什麼是委託 首先要知道什麼是委託,用最通俗易懂的話來講,你就可以把委託看成是用來執行方法 函式 的乙個東西。如何使用委託 在使用委託的時候,你可以像對待乙個類一樣對待它。即先宣告,再例項化。只是有點不同,類在例項化之後叫物件或例項,但委託在例項化後仍叫委託。宣告,如 1 namespace vczx...