2010-04-28 101 views
6

我不完全理解哈希算法。任何人都會以一種非常簡單易懂的方式向我解釋它。散列算法,它的用途?

謝謝

編輯:使用它與用戶名從一個文本文件。

+2

你不小心哈希算法 – mquander 2010-04-28 00:06:03

+0

有很多「哈希算法」,以及散列的許多用途。也許你可以在你的問題上更具體一些? – Amber 2010-04-28 00:06:34

+0

您忘記了 – 2010-04-28 00:07:09

回答

10

有很多hashing algorithms,但其基本思想是快速和(幾乎)唯一地提出一個數據標識符。這可以用作表格中的索引,以便快速查找數據。大多數散列算法都有衝突,其中兩部分數據會散列到相同的值,但對於最佳算法來說,這是非常罕見的。

舉個例子,爲什麼這可能是有用的,比方說,我整理了我的城市的整個電話簿。現在,當我想查找某個人的號碼時,現在不需要進行二分搜索,而只需要通過哈希算法運行他們的名字,然後直接即可查看我表格中的索引。

+0

謝謝,這有幫助。 – ritch 2010-04-28 00:16:30

+0

即使是那個名字搜索,我們也需要使用二進制或者線性權限?那麼把它轉換爲散列值有什麼意義 – 2016-03-12 18:09:22

+0

@bharathmuppa不,那是不對的。您將該名稱散列爲整數並直接轉到該索引。 – 2016-03-12 18:21:16

2

假設你要求某人基本上解釋一個用於散列思想的數組。現在想象一個巨大的陣列,您想要查找僅在一個陣列插槽中的特定數據片段。您可以使用輸入數據並使用它來計算索引,而不是迭代數組。使用您用於在數組中存儲數據的相同公式,您可以跳轉到所需數據的位置而不是循環。

+0

謝謝,這有助於。 – ritch 2010-04-28 00:16:11

2

散列算法試圖使大數據的比較更容易。不是將數據與平等進行比較,而是比較散列值。

有很多不同的散列算法,其中一些有像MD5,SHA1,SHA256等加密散列算法。它有兩個相同的散列值,你可以確定,數據也是一樣的。

+0

謝謝,這也有幫助。 – ritch 2010-04-28 00:20:46

2

散列表示數據之間的1對1關係。這是一種常用的語言數據類型,儘管有時稱爲字典。哈希算法是一種接受輸入並始終具有相同輸出的方式,其他方式稱爲1對1函數。理想的散列函數是當這個相同的過程總是產生一個獨特的輸出。所以你可以告訴別人,這裏是一個文件,這裏是它的md5散列。如果在此期間文件已損壞,則md5散列值將是不同的值。

實際上,散列函數總是會產生一個相同大小的值,例如md5()將總是返回128位,不管輸入大小如何。這使得1對1的關係成爲不可能。 A cryptographic hash function需要額外的預防措施,使得難以用相同的輸出產生2個不同的輸入,這被稱爲碰撞。這也使得很難扭轉這一功能。哈希函數用於密碼存儲,因爲如果攻擊者在哪裏獲取密碼的哈希,那麼它會強制攻擊者在哈希可以使用它登錄之前破壞哈希。打破哈希攻擊將採取單詞列表或英語詞典,並找到所有相應的哈希值,然後遍歷每個密碼尋找匹配的列表。

md5(),sha0和sha1()都容易受到散列衝突攻擊,絕不應該用於任何與安全有關的事情。相反,應該使用sha-2家族的任何成員,例如sha-256。