Mengapa Fungsi hash Python Menghasilkan Hasil Berubah Antara Sesi
Dalam Python 3.3 dan seterusnya, fungsi hash() terbina dalam menjana cincang yang berbeza untuk rentetan yang sama dalam sesi yang berbeza. Tingkah laku ini berpunca daripada pilihan reka bentuk untuk melindungi daripada input berniat jahat yang mengeksploitasi kelemahan perlanggaran.
Untuk mengelakkan penyerang daripada membebankan aplikasi dengan kekunci berlanggar, Python menggunakan benih rawak yang berbeza-beza merentas sesi. Offset ini memastikan ketidakpastian, menggagalkan keupayaan penyerang untuk mencipta perlanggaran.
Pembangun boleh mengatasi gelagat lalai ini dengan menetapkan pembolehubah persekitaran PYTHONHASHSEED. Nilai integer positif tetap akan menetapkan benih tertentu, manakala menetapkan nilai kepada 0 akan melumpuhkan offset sepenuhnya.
Python 2.7 dan 3.2 tidak mendayakan ciri ini secara lalai. Walau bagaimanapun, Python 3.3 dan seterusnya menggabungkannya untuk meningkatkan keselamatan.
Implikasi tingkah laku cincang pembolehubah ini melangkaui Penapis Bloom. Ia mempengaruhi susunan elemen dalam set, kamus (dalam Python 3.5 dan lebih awal), dan struktur pemetaan lain. Python tidak memberikan jaminan mengenai pesanan ini, yang boleh berbeza-beza berdasarkan sisipan, pemadaman dan benih cincang rawak.
Untuk pelaksanaan cincang yang stabil, pertimbangkan untuk menggunakan modul hashlib, yang menyediakan fungsi cincang kriptografi. Projek pybloom bergantung pada pendekatan ini untuk pencincangan yang boleh dipercayai.
Perlu diingat bahawa menyimpan ofset cincang adalah tidak praktikal kerana strukturnya yang kompleks. Walau bagaimanapun, kerumitan tambahan ini juga menghalang penyerang daripada mengeksploitasi serangan pemasaan untuk menentukan offset.
Atas ialah kandungan terperinci Mengapakah Fungsi `hash()` Python Menghasilkan Hasil Berbeza Antara Sesi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!