為什麼Python 的雜湊函數在會話之間產生不同的結果
在Python 3.3 及更高版本中,內建hash( ) 函數產生不同的雜湊值對於不同會話中的相同字串。這種行為源自於一種設計選擇,旨在防止利用衝突漏洞的惡意輸入。
為了防止攻擊者使用衝突金鑰使應用程式過載,Python 使用隨會話變化的隨機種子。此偏移確保了不可預測性,阻止攻擊者製造碰撞的能力。
開發人員可以透過設定 PYTHONHASHSEED 環境變數來覆寫此預設行為。固定的正整數值將設定特定的種子,而將該值設為 0 將完全停用偏移。
Python 2.7 和 3.2 預設不啟用此功能。然而,Python 3.3 開始合併它以增強安全性。
這種變數雜湊行為的影響超出了布隆過濾器的範圍。它影響集合、字典(Python 3.5 及更早版本)和其他映射結構中元素的順序。 Python 不提供有關此順序的保證,該順序可能會因插入、刪除和隨機雜湊種子而異。
對於穩定的雜湊實現,請考慮使用 hashlib 模組,它提供加密雜湊函數。 pybloom 專案依靠這種方法來實現可靠的哈希。
值得注意的是,由於結構複雜,儲存雜湊偏移量是不切實際的。然而,這種增加的複雜性也阻礙了攻擊者利用定時攻擊來確定偏移量。
以上是為什麼 Python 的 `hash()` 函數會在會話之間產生不同的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!