2011-02-27 64 views
-1

我提出了一個關於內置python哈希函數的主題:Old python hashing done left to right - why is it bad? 上一個主題是關於爲什麼它不好加密,因爲我們有一個名爲Gruyere的應用程序,裏面充滿了安全漏洞,它使用hash()來加密cookie。在Python中利用哈希函數

# global cookie_secret; only use positive hash values 
h_data = str(hash(cookie_secret + c_data) & 0x7FFFFFF) 

c_data是一個用戶名; cookie_secret是salt(默認爲'''')

我已經實現了一個更安全的加密方法,使用md5哈希與鹽,但一個練習是擊敗這個舊的加密,我仍然不明白如何:-(我'已經閱讀了python源代碼中的string_hash代碼,但它沒有記錄,我不知道它。

編輯:這個想法是寫一個程序,可以創建一個有效的cookie任何有效的用戶,所以我想我需要找出cookie_secret以某種方式

+0

@caf已經在你的上一個問題中回答了這個問題。 – 2011-02-27 16:15:13

+0

可能的重複[舊的Python哈希完成從左到右 - 爲什麼它不好?](http://stackoverflow.com/questions/5128990/old-python-hashing-done-left-to-right-why-is-它不好) – 2011-02-27 21:04:45

回答

0

Zack在你的最後一個問題中已經描述了答案:很容易找到碰撞

假設你在數據庫中保存了hash("pwd")(你實際上做了一些不同的事情並不重要。現在,如果您在網站中輸入"pwd",則可以輸入。但是如何檢查?同樣,"pwd"的散列是標記,並與數據庫中的值進行比較。但是如果有第二個字符串,例如"hello"hash("hello") == hash("pwd")呢?那麼你也可以使用"hello"作爲密碼。所以要打破加密,你不需要找到「pwd」,你只需要任何具有相同散列值的字符串。你可以只搜索這樣一個字符串蠻力(我猜你可以根據hash的來源知識做一些優化)

+0

這只是描述你如何使用碰撞,但不是你如何利用這個特定的哈希函數的特性。 – delnan 2011-02-27 14:56:17

+0

這個想法是編寫一個程序,可以創建一個有效的cookie任何有效的用戶,所以我想我需要找出cookie_secret莫名其妙? – KaiserJohaan 2011-02-27 15:04:10

+0

我還沒有詳細研究散列函數,但是如果你例如得到「a__」「b__」「c__」和「__a」「__b」「__c」的散列,似乎很有可能搜索到一個碰撞。雖然沒有幫助你的細節。祝你好運! – markijbema 2011-02-27 18:22:55