J'ai un client Android simple qui a besoin de «parler» à un simple écouteur HTTP C #. Je souhaite fournir un niveau d'authentification de base en passant un nom d'utilisateur / mot de passe dans les demandes POST.
Le hachage MD5 est trivial en C # et offre suffisamment de sécurité pour mes besoins, mais je n'arrive pas à trouver comment faire cela du côté Android.
EDIT: Juste pour répondre aux préoccupations soulevées au sujet de la faiblesse MD5 - le serveur C # fonctionne sur les PC des utilisateurs de mon client Android. Dans de nombreux cas, ils accèderont au serveur en utilisant le Wi-Fi sur leurs propres réseaux locaux, mais, à leurs propres risques, ils peuvent choisir d'y accéder depuis Internet. De plus, le service sur le serveur doit utiliser le relais du MD5 vers une application tierce sur laquelle je n'ai aucun contrôle.
la source
Réponses:
Voici une implémentation que vous pouvez utiliser (mise à jour pour utiliser des conventions Java plus à jour -
for:each
boucle,StringBuilder
au lieu deStringBuffer
):Bien que cela ne soit pas recommandé pour les systèmes qui impliquent même le niveau de sécurité de base (MD5 est considéré comme cassé et peut être facilement exploité ), il est parfois suffisant pour les tâches de base.
la source
NoSuchAlgorithmException
)?La réponse acceptée n'a pas fonctionné pour moi dans Android 2.2. Je ne sais pas pourquoi, mais il "mangeait" certains de mes zéros (0). Apache commons ne fonctionnait pas non plus sur Android 2.2, car il utilise des méthodes qui ne sont prises en charge qu'à partir d'Android 2.3.x. De plus, si vous voulez juste MD5 une chaîne, Apache commons est trop complexe pour cela. Pourquoi faut-il garder une bibliothèque entière pour n'en utiliser qu'une petite fonction ...
Enfin, j'ai trouvé l'extrait de code suivant ici qui a parfaitement fonctionné pour moi. J'espère que ce sera utile pour quelqu'un ...
la source
Le code androidsnippets.com ne fonctionne pas de manière fiable car les 0 semblent être supprimés du hachage résultant.
Une meilleure implémentation est ici .
la source
Si l'utilisation du codec Apache Commons est une option, alors ce serait une implémentation plus courte:
Ou SHA:
Source ci-dessus.
Veuillez suivre le lien et voter pour sa solution pour attribuer la bonne personne.
Lien de dépôt Maven: https://mvnrepository.com/artifact/commons-codec/commons-codec
Dépendance actuelle de Maven (au 6 juillet 2016):
la source
Une solution ci-dessus en utilisant DigestUtils n'a pas fonctionné pour moi. Dans ma version d'Apache commons (la dernière en 2013), une telle classe n'existe pas.
J'ai trouvé une autre solution ici dans un blog . Cela fonctionne parfaitement et n'a pas besoin des communs Apache. Il semble un peu plus court que le code de la réponse acceptée ci-dessus.
Vous aurez besoin de ces importations:
la source
Ceci est une légère variation des réponses Andranik et Den Delimarsky ci-dessus, mais c'est un peu plus concis et ne nécessite aucune logique au niveau du bit. Au lieu de cela, il utilise la
String.format
méthode intégrée pour convertir les octets en chaînes hexadécimales à deux caractères (ne supprime pas les 0). Normalement, je ne ferais que commenter leurs réponses, mais je n'ai pas la réputation de le faire.Si vous souhaitez renvoyer une chaîne en minuscules à la place, changez simplement
%02X
en%02x
.Edit: En utilisant BigInteger comme avec la réponse de wzbozon, vous pouvez rendre la réponse encore plus concise:
la source
J'ai fait une simple bibliothèque à Kotlin.
Ajouter à la racine build.gradle
sur App build.gradle
Usage
À Kotlin
Ensuite, utilisez la méthode hash ()
Il renverra respectivement MD5 et SHA-1.
En savoir plus sur la bibliothèque
https://github.com/ihimanshurawat/Hasher
la source
Voici la version Kotlin de la réponse @Andranik. Nous devons changer
getBytes
entoByteArray
(pas besoin d'ajouter le jeu de caractères UTF-8 car le jeu de caractères par défaut detoByteArray
est UTF-8) et transtyper le tableau [i] en entierJ'espère que ça aide
la source
Dans notre application MVC, nous générons des paramètres longs
et même dans l'application Android (thenk aide Andranik)
la source
J'ai utilisé la méthode ci-dessous pour me donner md5 en passant la chaîne pour laquelle vous voulez obtenir md5
la source
Veuillez utiliser SHA-512, MD5 n'est pas sécurisé
la source
MD5 est un peu vieux, SHA-1 est un meilleur algorithme, il y a un exemple ici .
( De plus, comme ils le notent dans cet article, Java gère cela seul, pas de code spécifique à Android. )
la source
La conversion toHex () beaucoup trop inutile prévaut dans d'autres suggestions, vraiment.
la source
cela fonctionne parfaitement pour moi, je l'ai utilisé pour obtenir MD5 sur LIST Array (puis le convertir en objet JSON), mais si vous avez seulement besoin de l'appliquer sur vos données. type format, remplacez JsonObject par le vôtre.
Surtout si vous avez une incompatibilité avec l'implémentation python MD5, utilisez ceci!
la source
Les solutions fournies pour le langage Scala (un peu plus court):
la source