Fonction de hachage dans Python 3.3 : pourquoi différents résultats sont renvoyés entre les sessions
Dans Python 3.3, la fonction hash() interne se comporte de manière inattendue, renvoyer différentes valeurs de hachage pour la même chaîne dans différentes sessions. Ce phénomène découle de l'utilisation par Python d'une graine de hachage aléatoire comme mesure de sécurité.
La graine de hachage aléatoire est utilisée pour empêcher les attaquants d'exploiter des clés prévisibles qui pourraient provoquer des attaques par piqûre de goudron. En ajoutant un décalage aléatoire au hachage, les attaquants ne peuvent pas anticiper quelles clés entreront en collision.
Pour contrôler le comportement de la fonction de hachage, la variable d'environnement PYTHONHASHSEED peut être définie. Une graine positive fixe peut être spécifiée pour éviter le caractère aléatoire, tandis que sa définition sur 0 désactive entièrement le décalage de la graine.
Avant Python 3.3, la graine de hachage aléatoire était désactivée ; cependant, il est devenu activé par défaut. Ce changement affecte non seulement les ensembles mais également les dictionnaires dans les versions Python 3.5 et antérieures.
De plus, object.__hash__() a un comportement spécial :
Il est important de noter que les valeurs de hachage ont un impact sur l'ordre d'itération des mappages tels que comme dictés et ensembles. Cependant, un tel ordre n'est pas garanti par Python et peut varier selon les différentes versions et versions.
Pour un hachage cohérent, envisagez d'utiliser le module hashlib, qui fournit des fonctions de hachage cryptographique. De plus, pybloom utilise cette approche pour plus de stabilité.
Bien que le décalage aléatoire des graines de hachage rende difficile pour les attaquants de déterminer le décalage, il empêche également le stockage du décalage lui-même. Cependant, cela garantit que les attaquants ne peuvent pas utiliser d'attaques temporelles pour déterminer la graine.
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!