167 votes

Fonction de hachage qui produit des hachages courts ?

Existe-t-il un moyen de chiffrement qui peut prendre une chaîne de n'importe quelle longueur et produire un hachage de moins de 10 caractères ? Je veux produire des identifiants raisonnablement uniques, mais basés sur le contenu du message, plutôt que de manière aléatoire.

Je peux vivre avec la contrainte des messages à des valeurs entières, cependant, si les chaînes de longueur arbitraire sont impossibles. Cependant, le hachage ne doit pas être similaire pour deux entiers consécutifs, dans ce cas.

121voto

Greg Hewgill Points 356191

Vous pouvez utiliser n'importe quel algorithme de hachage communément disponible (par ex. SHA-1), qui vous donnera un résultat légèrement plus long que ce dont vous avez besoin. Il suffit de tronquer le résultat à la longueur désirée, ce qui peut être suffisant.

Par exemple, en Python :

>>> import hashlib
>>> hash = hashlib.sha1("my message".encode("UTF-8")).hexdigest()
>>> hash
'104ab42f1193c336aa2cf08a2c946d5c6fd0fcdb'
>>> hash[:10]
'104ab42f11'

62voto

B T Points 4868

Si vous n'avez pas besoin d'un algorithme qui est fort contre la modification intentionnelle, j'ai trouvé un algorithme appelé adler32 qui produit des résultats assez courts (~8 caractères). Choisissez-le dans la liste déroulante ici pour l'essayer :

http://www.sha1-online.com/

26voto

feran Points 143

Vous pouvez utiliser la bibliothèque hashlib pour Python. Les algorithmes shake_128 et shake_256 fournissent des hachages de longueur variable. Voici du code de travail (Python3) :

import hashlib
>>> my_string = 'hello shake'
>>> hashlib.shake_256(my_string.encode()).hexdigest(5)
'34177f6a0a'

Notez qu'avec un paramètre de longueur x (5 dans l'exemple) la fonction renvoie une valeur de hachage de longueur 2x.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X