Python ใช้เมล็ดแฮชแบบสุ่มเพื่อป้องกันไม่ให้ผู้โจมตีเจาะรูแอปพลิเคชันของคุณโดยส่งคีย์ที่ออกแบบมาให้ชนกัน ดูการเปิดเผยช่องโหว่เดิม การหักล้างแฮชด้วยเมล็ดพันธุ์แบบสุ่ม (ตั้งค่าครั้งเดียวเมื่อเริ่มต้น) ผู้โจมตีจะไม่สามารถคาดเดาได้อีกต่อไปว่าคีย์ใดจะชนกัน
คุณสามารถตั้งค่าเมล็ดพันธุ์คงที่หรือปิดใช้งานคุณลักษณะโดยการตั้งค่าPYTHONHASHSEED
ตัวแปรสภาพแวดล้อม ; ค่าเริ่มต้นคือrandom
แต่คุณสามารถตั้งค่าเป็นค่าจำนวนเต็มบวกคงที่ได้โดย0
ปิดใช้งานคุณลักษณะทั้งหมด
Python เวอร์ชัน 2.7 และ 3.2 มีคุณสมบัติปิดใช้งานโดยค่าเริ่มต้น (ใช้-R
สวิตช์หรือตั้งค่าPYTHONHASHSEED=random
เพื่อเปิดใช้งาน) เปิดใช้งานโดยค่าเริ่มต้นใน Python 3.3 ขึ้นไป
หากคุณอาศัยลำดับของคีย์ในชุด Python ก็อย่าทำ Python ใช้ตารางแฮชเพื่อใช้งานประเภทเหล่านี้และลำดับของมันขึ้นอยู่กับประวัติการแทรกและการลบรวมถึงเมล็ดพันธุ์แฮชแบบสุ่ม โปรดทราบว่าใน Python 3.5 และเก่ากว่าจะมีผลกับพจนานุกรมด้วย
ดูobject.__hash__()
เอกสารวิธีการพิเศษด้วย :
หมายเหตุ : โดยค่าเริ่มต้น__hash__()
ค่าของวัตถุ str, bytes และ datetime จะเป็น "เค็ม" โดยมีค่าสุ่มที่คาดเดาไม่ได้ แม้ว่าจะคงที่ภายในกระบวนการ Python แต่ละรายการ แต่ก็ไม่สามารถคาดเดาได้ระหว่างการเรียกใช้ Python ซ้ำ ๆ
สิ่งนี้มีวัตถุประสงค์เพื่อให้การป้องกันการปฏิเสธการให้บริการที่เกิดจากอินพุตที่เลือกอย่างระมัดระวังซึ่งใช้ประโยชน์จากประสิทธิภาพในกรณีที่เลวร้ายที่สุดของการแทรกคำสั่ง O (n ^ 2) ความซับซ้อน ดูรายละเอียดได้ที่http://www.ocert.org/advisories/ocert-2011-003.html
การเปลี่ยนค่าแฮชมีผลต่อลำดับการวนซ้ำของคำสั่งชุดและการแมปอื่น ๆ Python ไม่เคยรับประกันเกี่ยวกับการสั่งซื้อนี้ (และโดยทั่วไปจะแตกต่างกันระหว่างรุ่น 32 บิตและ 64 บิต)
PYTHONHASHSEED
ดูเพิ่มเติม
หากคุณจำเป็นต้องมีการดำเนินงานที่มีเสถียรภาพกัญชาคุณอาจต้องการที่จะดูที่hashlib
โมดูล ; สิ่งนี้ใช้ฟังก์ชันแฮชการเข้ารหัส โครงการ pybloom ใช้วิธีการนี้
เนื่องจากค่าชดเชยประกอบด้วยส่วนนำหน้าและส่วนต่อท้าย (ค่าเริ่มต้นและค่า XORed สุดท้ายตามลำดับ) คุณจึงไม่สามารถจัดเก็บค่าชดเชยได้อย่างน่าเสียดาย ในด้านบวกหมายความว่าผู้โจมตีไม่สามารถกำหนดค่าชดเชยได้อย่างง่ายดายด้วยการโจมตีตามเวลา