12
votes

Bons hachages numériques

Je cherche à hacher une chaîne mais j'ai besoin de la sortie pour être un entier pour que je ne puisse pas faire de MD5. Les gens ont-ils ici des hachages numériques préférés qu'ils voudront peut-être vous éclairer. J'utilise php.

merci!


2 commentaires

Voulez-vous dire un "bon" hachage comme en bonne sécurité ou comme dans une bonne répartition clé? Le premier vous donnera généralement le deuxième, mais à un coût comparativement élevé.


La page suivante a plusieurs implémentations de fonctions de hachage à usage général qui sont efficaces et exposent des collisions minimales: /programmation/hashfunctions/index.html


4 Réponses :


3
votes

Peut-être que c'est assez bon pour vous:

echo hash('adler32', $string);


0 commentaires

4
votes

La sortie de MD5 est un nombre, comme avec à peu près tous les hachages imaginables. C'est juste un nombre généralement exprimé en hexagone. Utilisez n'importe quel algorithme de hachage qui vous permet de vous mettre à votre disposition, de couper autant de bits que vous voulez hors de la fin et de traiter ces bits comme un nombre. Tout bonne hachage aura ses derniers (ou premier ou moyen) n bits tout aussi répartis comme une valeur totale.


2 commentaires

Oui, mais, tronquant ou plier le résultat du hachage le fera de perdre de la qualité à la fois en termes de sécurité et de distribution.


Si le hachage est bon (si c'est une approximation appropriée d'un hachage idéal), alors lorsque vous le tronquez, il restera également bien réparti et ne perdra aucune sécurité, sauf ce qui est dû à la réduction du clavier.




0
votes

Vous pouvez utiliser base_convert pour changer hexadécimal en nombre décimal et inversement. Si vous souhaitez convertir des entiers (comme une chaîne) sur Hex, vous êtes limité à 32 bits ou moins, je crois (php_int_max).

adler32
c1015d04
3238092036
c1015d04
yes

crc32
accf8b33
2899282739
accf8b33
yes

crc32b
d87f7e0c
3632233996
d87f7e0c
yes


0 commentaires