2009-09-30 9 views

Répondre

17

Si vous pouvez l'inverser, alors par définition ce n'est pas un hachage. C'est un encodage. Tout encodage n'aura aucune collision (sinon il ne serait pas capable de l'inverser avec précision).

Un codage commun à cette fin est base64.

8

Tout le point d'un hachage est qu'il n'est pas réversible (à court de force brute, en essayant toutes les entrées possibles jusqu'à ce que la sortie corresponde).

S'agit-il d'un service de raccourcissement d'URL? La façon habituelle de le faire est de stocker http://google.com dans une base de données sous une clé unique, et quand quelqu'un interroge avec cette clé (qui pourrait être 'S3jvZLSDK' si vous aimez vraiment les chaînes aléatoires, mais pourrait tout aussi bien être '1') crachez la valeur dont vous vous êtes souvenu à nouveau.

+0

Même l'approche par force brute ne fonctionnerait pas. Vous êtes presque assuré de trouver une mauvaise réponse, car il y a beaucoup plus d'entrées possibles que de codes de hachage. –

+0

Dans la plupart des cas, vous n'avez pas besoin de trouver la valeur d'origine, mais seulement une valeur qui générerait le même hachage. Mais oui, dans ce cas, le fait de forcer le hachage serait inutile. –

+0

Pour les URL, vous auriez une meilleure chance de battre la bonne entrée que n'importe quelle ancienne chaîne ... http://google.com serait relativement facile à trouver, mais pour tout ce qui a un chemin plus long ou des paramètres non, il y aurait ne soit pas une chance. – bobince

0

Il n'existe aucun moyen d'obtenir des collisions proches de zéro, mais vous pouvez rendre les collisions arbitrairement improbables si vous utilisez un hachage cryptographique avec une taille de sortie importante. La famille SHA-2 contient une version avec une clé de 512 bits; ça devrait te faire.

4

Etes-vous en train d'essayer d'écrire quelque chose comme URL shortener? Si c'est le cas, générez simplement une chaîne aléatoire, puis utilisez une grande table de hachage, une base de données relationnelle (avec index), etc. pour relier les clés (S3jvZLSDK) aux URL (google.com) et vice versa.

Cela vous donnera une solution facile pour gérer les collisions (la clé existe déjà, l'URL existe déjà) et les recherches rapides.

Questions connexes