2010-10-31 6 views
2

A partir de ce code exemple de MSDN http://msdn.microsoft.com/en-us/library/system.string.gethashcode.aspxDéchiffrer la chaîne de hachage de String.GetHashCode?

Le code de hachage pour "abc" est: 536991770

Mais comment reconvertir le "536991770" à "abc"?

+6

Vous devinez. Beaucoup. –

+0

Il est possible d'obtenir ** une chaîne ** qui a ce code, mais ce ne sera probablement pas ** la chaîne ** que vous avez hachée. – CodesInChaos

+0

Vous est-il déjà venu à l'esprit qu'il n'y a que 4 294 967 296 codes de hachage différents, mais une infinité de chaînes? – Timwi

Répondre

14

Il est impossible d'obtenir une valeur à partir du hashcode. Voir la définition hash-function. Les valeurs de hachage ne sont pas utilisées pour identifier de manière unique la valeur d'origine. Les valeurs et sont uniques pour chaque type de valeur d'entrée.

Une fonction de hachage peut mapper deux ou plusieurs clés à la même valeur de hachage. Dans de nombreuses applications , il est souhaitable minimiser l'occurrence de ces collisions , ce qui signifie que la fonction de hachage doit mapper les clés aux valeurs de hachage aussi uniformément que possible.

8

Vous ne pouvez pas. Les hachages sont un moyen.

La chose avec des hachages, c'est que vous perdez des informations. Indépendamment de la longueur de la chaîne, le résultat est toujours un entier. Cela signifie par exemple qu'obtenir le has d'une chaîne de 10.000 caractères se traduira également par un nombre entier. Il est bien sûr impossible de récupérer la chaîne d'origine de cet entier.

2

Il n'y a aucun moyen de "déchiffrer" le code de hachage. Entre autres raisons, parce que deux chaînes différentes peuvent très bien produire le même code de hachage. Cette caractéristique à elle seule rendrait impossible l'inversion du processus.

1

Vous ne pouvez pas,
Même si vous aurez une table avec toutes les chaînes dans le monde et leur code de hachage vous ne seriez pas en mesure d'y parvenir car il y a plus cordes puis ints (~ 4 milliards ints) donc il sont plusieurs chaînes qui résultent dans le même code de hachage.

Questions connexes