Pourquoi la fonction `hash()` de Python produit-elle des résultats différents entre les sessions ?

Linda Hamilton
Libérer: 2024-11-03 19:25:29
original
416 Les gens l'ont consulté

Why Does Python's `hash()` Function Produce Different Results Between Sessions?

Pourquoi la fonction de hachage de Python produit des résultats variables entre les sessions

Dans Python 3.3 et au-delà, la fonction hash() intégrée génère des hachages distincts pour des chaînes identiques dans différentes sessions. Ce comportement découle d'un choix de conception visant à se protéger contre les entrées malveillantes exploitant les vulnérabilités de collision.

Pour empêcher les attaquants de surcharger l'application avec des clés en collision, Python utilise une graine aléatoire qui varie selon les sessions. Ce décalage garantit l'imprévisibilité, contrecarrant la capacité des attaquants à créer des collisions.

Les développeurs peuvent remplacer ce comportement par défaut en définissant la variable d'environnement PYTHONHASHSEED. Une valeur entière positive fixe définira une graine spécifique, tandis que définir la valeur sur 0 désactivera entièrement le décalage.

Python 2.7 et 3.2 n'activent pas cette fonctionnalité par défaut. Cependant, Python 3.3 l'intègre pour améliorer la sécurité.

Les implications de ce comportement de hachage variable s'étendent au-delà des filtres Bloom. Cela affecte l'ordre des éléments dans les ensembles, les dictionnaires (dans Python 3.5 et versions antérieures) et d'autres structures de mappage. Python ne fournit aucune garantie concernant cet ordre, qui peut varier en fonction de l'insertion, de la suppression et de la graine de hachage aléatoire.

Pour des implémentations de hachage stables, envisagez d'utiliser le module hashlib, qui fournit des fonctions de hachage cryptographique. Le projet pybloom s'appuie sur cette approche pour un hachage fiable.

Il convient de noter que le stockage du décalage de hachage n'est pas pratique en raison de sa structure complexe. Cependant, cette complexité supplémentaire empêche également les attaquants d'exploiter les attaques temporelles pour déterminer le décalage.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal