2016-02-25 103 views
-1

因此,從我所看到的情況來看,不可能解密諸如MD5或SHA-1之類的哈希算法,而不會強制它或使用彩虹表格。這似乎混淆了我在使用哈希的幾個方面。這些令人困惑的問題是:散列的問題和它的問題?

  1. 如果散列不能被解密,首先會有什麼意思?

  2. 哈希密碼如何能夠在數據庫中使用?

  3. 另外,由於人們說它就像模操作一樣,如果有的話,什麼是阻止多個輸入等同於相同的散列?

+1

存儲明文密碼不好,原因很明顯。當用戶登錄時存儲散列密碼時,您不會解密散列並進行比較......您將加密密碼並比較散列值。是的,這意味着從技術上講,不止一個密碼可以工作,但它們在數學上足夠遠以至於無關緊要。 [這是更完整的解釋](http://stackoverflow.com/a/287738/119477) –

+0

[哈希和加密算法之間的根本區別]的可能重複(http://stackoverflow.com/questions/4948322/fundamental-哈希算法和加密算法之間的差異) –

回答

1

如果有人根本不SHA1或MD5一個密碼,那麼他們得到的幾乎沒有任何保護。

這就是爲什麼理解處理「密碼哈希」的正確方法很重要。請閱讀Our password hashing has no clothes

回答您的問題:

  1. 您可以驗證沒有「解密哈希」用戶:你只是「散」的用戶在登錄時輸入的密碼(與鹽和其他參數)並驗證它是否與存儲在數據庫中的預期結果相匹配。

  2. 見1和特洛伊亨特鏈接

  3. 誰的人說,這就像一個模操作正在一個壞的比喻:他們在這個問題上非專業人士。無論如何,「散列」函數的屬性使它很難找到衝突,並且鹽可以防止具有相同密碼的兩個用戶在數據庫中擁有相同的密碼「哈希」。

其他資源:

+0

好,只要它沒有遵循鏈接但是如果你需要散列使用SHA-256或者SHA-512,一個好的免責聲明不是使用SHA-1或MD5。對於「散列」密碼,甚至不使用HMAC,請使用密鑰派生函數,例如[PBKDF2](https://en.wikipedia.org/wiki/PBKDF2)或[bcrypt](https:// en。 wikipedia.org/wiki/Bcrypt)。 – zaph

0

它不像模數。基於輸入,散列可以合理地保證是唯一的。如果您將密碼作爲散列輸入到數據庫中,那麼您只需對密碼條目進行散列處理,並根據存儲在數據庫中的內容進行檢查。這樣,您就不會將可讀的密碼存儲在數據庫中,這些密碼對其他人是公開可見的。通常情況下,你會有一個私鑰,一些鹽和一些獨特的東西,像散列算法中包含的時間戳,以確保它不容易被欺騙。

這可能會進一步幫助你: http://searchsqlserver.techtarget.com/definition/hashing

+0

注意,這是WRT密碼哈希,還有其他類型,例如用於字典方法的字典方法,它們不需要避免衝突但是速度很快,這可能是模運算參考coes來自。 – zaph

0

即使散列的過程基本上是不解密,如之前指出的問題是,每個哈希幾乎是唯一的,因此這意味着使用網站如md5decrypt其中包含了很多不同的話和他們的加密哈希值,一個可能會找到他正在尋找的密碼。

那就是如果密碼不夠強大的話。顯然不應該使用密碼「密碼」,因爲它可能會在md5decrypt等大多數網站中找到。

你應該怎麼做才能保護你網站上的密碼其實很簡單。首先,不要使用像md5或sha1這樣的舊哈希。至少使用sha256,如果你有足夠的sql存儲,sha384或sha512。你應該知道,大多數在線哈希數據庫都只是最常用的哈希(在大多數情況下,比如md5,sha1,sha256)。所以你應該找到一個在線數據庫中不太表現的散列類型。

然後,你應該(實際上)在加密用戶密碼時使用salt,即在加密密碼之前添加一些字,字母等等,然後將其存儲在某個地方,這樣您仍然可以讓人們登錄。你也可以添加一個pepper到鹽中,使所有的事情變得更強。

在使用鹽的同時,嘗試找到黑客不會考慮的方法,例如雙鹽或三重鹽,或嘗試不同的方法來連接鹽和實際密碼等。您也可以用雙鹽加密,如sha512(sha384()),這幾乎不可能找到。

但是,請不要存儲未加密的密碼!