Convertir 32-char md5 de la chaîne en entier
Quel est le moyen le plus efficace pour convertir un hachage md5 pour un entier unique pour effectuer une opération modulo?
Voulez-vous faire de hachage % x ou x % de hachage? Dans le premier cas, vous pourriez même pas besoin de la totalité de hachage pour calculer la réponse.
Je suis à la recherche de hachage % X
N'ont aucune de ces réponses a été utile ou avez-vous encore besoin de plus de connaissances?
Je suis à la recherche de hachage % X
N'ont aucune de ces réponses a été utile ou avez-vous encore besoin de plus de connaissances?
OriginalL'auteur ensnare | 2009-11-22
Vous devez vous connecter pour publier un commentaire.
Étant donné que la solution de la langue n'a pas été spécifié, le Python est utilisé pour cet exemple.
Bah, jamais l'esprit, int() retourne un long si nécessaire.
Pourquoi pensez-vous convertir en base 16? Le fait que la convention?
Le
hexdigest
méthode est facile à utiliser. La conversion de la chaîne, il retourne dans un certain nombre est également très simple à faire avec un appel àint
.Merci pour la réponse je ne m'attendais pas à propos de
hexdigest
vsint
, mais plus de la base 16, par opposition à la base de 10 ou de la base 2 par exemple. J'ai essayé un peu les différentes options, et il semble que le hachage de se convertir à un nombre entier avec une base de 16 ou plus, mais je ne comprends pas vraiment pourquoi.OriginalL'auteur Noctis Skytower
Vous n'avez pas dit ce que la plateforme que vous utilisez, ou ce que le format de ce hash est. On peut supposer que c'est hexagone, donc, vous avez de 16 octets d'informations.
Afin de convertir un unique entier, en gros, vous avez besoin d'un de 16 octets (128 bits) de type entier. De nombreuses plates-formes n'ont pas un type disponible nativement, mais vous pouvez utiliser deux
long
valeurs dans C# ou Java, ou unBigInteger
en Java ou en .NET 4.0.Conceptuellement, vous devez analyser la chaîne hexadécimale d'octets, et ensuite de convertir les octets en un entier (ou les deux). Le moyen le plus efficace de le faire dépend entièrement de la plateforme que vous utilisez.
Vous seriez à la recherche à sscanf en PHP: au.php.net/manual/en/function.sscanf.php
Sauf que sscanf ne semble pas aimer le
%x
format, sauf si c'est juste moi...OriginalL'auteur Jon Skeet
Il n'y a plus de données dans un MD5 que ne le fit même un 64b entier, donc il n'y a aucun moyen (sans savoir ce que la plateforme que vous utilisez) pour obtenir un entier unique. Vous pouvez obtenir un peu uniques, l'un par la conversion de l'hex version à plusieurs entiers de données puis de les combiner (addition ou multiplication). Comment exactement vous allez au sujet de qui dépend du langage que vous utilisez.
Beaucoup de langue volonté de mettre en œuvre un
unpack
ousscanf
fonction, qui sont de bons endroits pour commencer votre recherche.Bien sûr, mais beaucoup de plates-formes n'ont pas de longueur arbitraire entiers. Dépend entièrement de ce que la plate-forme sur que si il y a un (native) BigInteger mise en œuvre.
Absolument, mais "cela dépend de votre plate-forme" n'est pas la même chose que "il n'ya aucun moyen" 🙂
OriginalL'auteur Matthew Scharley
Si vous avez besoin d'module, vous n'avez pas réellement besoin de le convertir en 128 octets entier. Vous pouvez aller chiffres par un chiffre ou d'un octet par octet, comme ceci.
OriginalL'auteur yu_sha
Vous aurez besoin de définir votre propre fonction de hachage, qui convertit un MD5 de la chaîne en un entier de la largeur désirée. Si vous voulez interpréter le hash MD5 comme une simple chaîne de caractères, vous pouvez essayer le FNV algorithme. C'est assez rapide et assez uniformément répartis.
OriginalL'auteur Chris Tonkinson