Comment hash d'une chaîne de caractères dans Android?
Je suis en train de travailler sur une application Android et avoir un couple de cordes que je voudrais crypter avant de l'envoyer à une base de données. Je voudrais quelque chose qui est sûr, facile à mettre en œuvre, permettra de générer la même chose à chaque fois qu'il est passé les mêmes données, et de préférence de l'entraînera dans une chaîne de caractères qui reste une longueur constante peu importe la taille de la chaîne est passée à il est. Peut-être que je suis à la recherche d'une table de hachage.
- Un hash est unidirectionnel, si vous voulez être en mesure de déchiffrer les données, vous ne pouvez pas stocker avec une longueur constante à mon humble avis
- Je sais. C'est pour la validation et la j'ai juste besoin d'être en mesure de comparer une valeur à une autre, n'aura pas besoin de "défaire" il. Je sais que je n'ai pas dit que j'ai prévu de le déchiffrer, donc merci pour votre réponse.
- Aucune infraction, mais le titre de votre question est trompeuse
Vous devez vous connecter pour publier un commentaire.
Cet extrait de calculer md5 pour toute la chaîne de
Source: http://www.androidsnippets.com/snippets/52/index.html
Espère que ce sera utile pour vous
String
de chaquebyte
(dans la boucle), ajouter le préfixe "0" jusqu'à ce que la longueur est de 2, puis l'ajouter àhexString
. Fonctionne parfaitement pour moi maintenant.Que la fonction ci-dessus de (http://www.androidsnippets.org/snippets/52/index.html) est erronée. Si l'un des chiffres dans le messageDigest n'est pas un deux de caractères hex valeur (0x09), il ne fonctionne pas correctement car il n'a pas le tapis avec un 0. Si vous recherchez autour de vous verrez que la fonction et les plaintes concernant le non travail. Voici un meilleur trouvé dans la section des commentaires de cette page, dont j'ai légèrement modifié:
pas de méthode de travail:
résultat - 1865e62e7129927f6e4cd9bff104f0 (longueur 30)
méthode de travail:
résultat - 1865e62e7129927f6e4c0d9bff1004f0 (longueur 32)
La réponse ci-dessus est presque à 100%. Il échouera avec unicode.
Besoin de la longueur à partir du tableau d'octets, pas la chaîne.
Avec @Donut solution, avec codé en UTF-8 caractères (par exemple: é), vous devez utiliser
getBytes("UTF-8")
. Voici ma correction de la méthode digest:Donut de la solution en une seule fonction:
La suite a fonctionné pour moi sur Android sans tronquer tout 0 en face:
Si vous n'avez pas les contraintes de sécurité et je voulais juste convertit une Chaîne en un unique int.
J'écris parce que ce que j'ai cherché et atteint ici.
si vous avez jusqu'à 10 caractères, il sera même unique
Voir aussi
https://stackoverflow.com/a/17583653/1984636
Il est tard pour l'auteur, mais avant cela, je reçois
Integer.toHexString(0xff&b)
, qui supprime leader 0s de la chaîne hexadécimale. Il me fait lutté pour une longue période de temps. Espérons utile pour certains gars.si vous utilisez la goyave: