Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Nilai Hash Python 3.3 Berbeza Antara Sesi?

Mengapa Nilai Hash Python 3.3 Berbeza Antara Sesi?

Barbara Streisand
Barbara Streisandasal
2024-11-02 22:56:29238semak imbas

Why Do Python 3.3 Hash Values Differ Between Sessions?

Fungsi Hash dalam Python 3.3: Mengapa Hasil Berbeza Dikembalikan Antara Sesi

Dalam Python 3.3, fungsi hash() dalaman bertindak secara tidak dijangka, mengembalikan nilai cincang yang berbeza untuk rentetan yang sama dalam sesi yang berbeza. Fenomena ini berpunca daripada penggunaan Python terhadap benih cincang rawak sebagai langkah keselamatan.

Biji cincang rawak digunakan untuk menghalang penyerang daripada mengeksploitasi kunci yang boleh diramal yang boleh menyebabkan serangan tar-pitting. Dengan menambahkan offset rawak pada cincang, penyerang tidak dapat menjangka kekunci mana yang akan berlanggar.

Untuk mengawal kelakuan fungsi cincang, pembolehubah persekitaran PYTHONHASHSEED boleh ditetapkan. Benih positif tetap boleh ditentukan untuk menghalang rawak, sementara menetapkannya kepada 0 melumpuhkan pengimbangan benih sepenuhnya.

Sebelum Python 3.3, benih cincang rawak telah dilumpuhkan; bagaimanapun, ia telah didayakan secara lalai. Perubahan ini bukan sahaja mempengaruhi set tetapi juga kamus dalam Python versi 3.5 dan lebih awal.

Selain itu, object.__hash__() mempunyai gelagat istimewa:

  • Untuk str, bait dan datetime objek, nilai cincang "digaramkan" dengan nilai yang tidak dapat diramalkan, menjadikannya konsisten dalam proses tetapi tidak dapat diramalkan merentas sesi.
  • Langkah ini menghalang serangan penafian perkhidmatan berdasarkan mengeksploitasi sisipan kamus kes terburuk.

Adalah penting untuk ambil perhatian bahawa nilai cincang memberi kesan kepada susunan lelaran pemetaan seperti dict dan set. Walau bagaimanapun, pesanan sedemikian tidak dijamin oleh Python dan mungkin berbeza antara binaan dan versi yang berbeza.

Untuk pencincangan yang konsisten, pertimbangkan untuk menggunakan modul hashlib, yang menyediakan fungsi cincang kriptografi. Selain itu, pybloom menggunakan pendekatan ini untuk kestabilan.

Walaupun pengimbangan benih cincang rawak menyukarkan penyerang untuk menentukan ofset, ia juga menghalang penyimpanan offset itu sendiri. Walau bagaimanapun, ini memastikan bahawa penyerang tidak boleh menggunakan serangan masa untuk menentukan benih.

Atas ialah kandungan terperinci Mengapa Nilai Hash Python 3.3 Berbeza Antara Sesi?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn