MD5 peut être dangereux en tant que fonctionnalité de sécurité à sens unique, mais il est toujours bon pour les applications de somme de contrôle génériques.
rustyx
vous pouvez essayer en php, très facilement résolu.
Le calcul du hachage en effectuant l'une des actions suivantes:
Alimentez l'intégralité de l'entrée en tant que byte[] et calculez le hachage en une seule opération avec md.digest(bytes).
Nourrir l' MessageDigestun byte[]morceau à la fois en appelant md.update(bytes). Lorsque vous avez terminé d'ajouter des octets d'entrée, calculez le hachage avec
md.digest() .
Le byte[]retourné par md.digest()est le hachage MD5.
Une chose qui n'est pas mentionnée ici et qui m'a pris par surprise. Les classes MessageDigest ne sont PAS thread-safe. S'ils doivent être utilisés par différents threads, créez-en simplement un nouveau, au lieu d'essayer de les réutiliser.
mjuarez
39
Il utilise plusieurs méthodes pour muter son état interne. Comment le manque de sécurité des fils peut-il être surprenant?
Bombe
90
@Bombe: pourquoi devrions-nous nous attendre à devoir connaître l'état interne de MessageDigest?
Dan Barowy
28
@DanBarowy bien, vous êtes muter (ie appeler des méthodes qui ne renvoient pas les valeurs , mais provoquent d' autres méthodes pour renvoyer des valeurs différentes) ainsi jusqu'à preuve du contraire , vous devriez toujours supposer qu'il est thread-safe de le faire.
Bombe
3
@Traubenfuchs MessageDigestvous permet de saisir les données par blocs. Ce ne serait pas possible avec une méthode statique. Bien que vous puissiez affirmer qu'ils auraient dû en ajouter un de toute façon pour plus de commodité lorsque vous pouvez transmettre toutes les données à la fois.
user253751
690
La MessageDigestclasse peut vous fournir une instance du résumé MD5.
Lorsque vous travaillez avec des chaînes et les classes de chiffrement, assurez-vous de toujours spécifier l'encodage dans lequel vous souhaitez que la représentation en octets soit utilisée. Si vous l'utilisez, string.getBytes()elle utilisera la plate-forme par défaut. (Toutes les plateformes n'utilisent pas les mêmes valeurs par défaut)
Si vous avez beaucoup de données, jetez un œil à la .update(byte[])méthode qui peut être appelée à plusieurs reprises. Appelez ensuite .digest()pour obtenir le hachage résultant.
Cette rubrique est également utile si vous devez convertir les octets résultants en chaîne hexadécimale.
2012
1
Alors comment convertir ce chiffre en chaîne pour que nous puissions l'insérer dans mysql?
Humphrey
2
Mieux encore, dans la mesure du possible yourString.getBytes(StandardCharsets.UTF_8). Cela empêche la manipulation d'un fichier UnsupportedEncodingException.
Hummeling Engineering BV
267
Si vous voulez réellement que la réponse soit une chaîne par opposition à un tableau d'octets, vous pouvez toujours faire quelque chose comme ceci:
String plaintext ="your text here";MessageDigest m =MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());byte[] digest = m.digest();BigInteger bigInt =newBigInteger(1,digest);String hashtext = bigInt.toString(16);// Now we need to zero pad it if you actually want the full 32 chars.while(hashtext.length()<32){
hashtext ="0"+hashtext;}
@BalusC: faux, la méthode BigInteger.toString renvoie le nombre complet dans la base spécifiée. 0x0606 sera imprimé en 606, seuls les zéros de fin sont omis,
Spidey
11
Nitpick mineur: m.reset () n'est pas nécessaire juste après avoir appelé getInstance. Plus mineur: «votre texte ici» nécessite des guillemets doubles.
David Leppik
À partir de Java 11, vous pouvez utiliser à la hashtext = "0".repeat(32 - hashtext.length()) + hashtextplace de la while, afin que les éditeurs ne vous avertissent pas que vous effectuez une concaténation de chaînes dans une boucle.
tom
Au lieu de m.update (plainxt.getBytes ()); Je recommanderais de spécifier l'encodage. tels que m.update (plainxt.getBytes ("UTF-8")); getBytes () ne garantit pas l'encodage et peut varier d'un système à l'autre, ce qui peut entraîner des résultats MD5 différents entre les systèmes pour la même chaîne.
user1819780
256
Vous pouvez également consulter la classe DigestUtils du projet de codec apache commons , qui fournit des méthodes très pratiques pour créer des résumés MD5 ou SHA.
En particulier, les méthodes qui renvoient des représentations codées "sûres" des données d'octets sous forme de chaîne.
Rob
4
Cependant, il n'y a pas de moyen facile d'intégrer la classe DigestUtils dans votre projet sans ajouter une tonne de bibliothèques ou porter la classe "par main" qui nécessite au moins deux classes supplémentaires.
iuiz
Je ne le trouve pas non plus dans les dépôts maven. Grrrr.
sparkyspider
5
Devrait être dans les référentiels Maven centraux, sauf si je deviens fou: groupId = commons-codec artifactId = commons-codec version = 1.5
Nick Spacek
160
Trouvé ceci:
publicString MD5(String md5){try{
java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");byte[] array = md.digest(md5.getBytes());StringBuffer sb =newStringBuffer();for(int i =0; i < array.length;++i){
sb.append(Integer.toHexString((array[i]&0xFF)|0x100).substring(1,3));}return sb.toString();}catch(java.security.NoSuchAlgorithmException e){}returnnull;}
sur le site ci-dessous, je n'en prends aucun crédit, mais c'est une solution qui fonctionne! Pour moi, beaucoup d'autres codes ne fonctionnaient pas correctement, j'ai fini par manquer des 0 dans le hachage. Celui-ci semble être le même que PHP. source: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093
Vous devez spécifier l'encodage à utiliser getBytes(), sinon votre code obtiendra des résultats différents sur différentes plates-formes / paramètres utilisateur.
Paŭlo Ebermann
@ PaŭloEbermann fait MessageDigest.getInstance ("MD5"); pas assez? J'ai essayé d'ajouter "MD5" dans getBytes () mais cela a renvoyé une erreur
Blaze Tama
2
@BlazeTama "MD5" n'est pas un encodage, c'est un algorithme de résumé de message (et non un qui devrait être utilisé dans de nouvelles applications). Un codage est une paire d'algorithmes qui transforme les octets en chaînes et les chaînes en octets. Un exemple serait "UTF-8", "US-ASCII", "ISO-8859-1", "UTF-16BE" et similaires. Utilisez le même encodage que toutes les autres parties qui calculent un hachage de cette chaîne, sinon vous obtiendrez des résultats différents.
Paŭlo Ebermann
6
Pour un exemple du jeu de caractères ... (utilisez UTF-8, c'est le meilleur et le plus compatible à mon avis) ...byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Richard
Comme ce n'est pas ma solution et que je n'ai pas testé tous les scénarios moi-même, je vais le laisser inchangé, bien que je pense que spécifier l'encodage, etc. est probablement une bonne idée.
dac2009
88
Voici comment je l'utilise:
finalMessageDigest messageDigest =MessageDigest.getInstance("MD5");
messageDigest.reset();
messageDigest.update(string.getBytes(Charset.forName("UTF8")));finalbyte[] resultByte = messageDigest.digest();finalString result =newString(Hex.encodeHex(resultByte));
Il s'agit de la méthode qui fournit la même valeur de retour que la fonction MySQL md5 (str). Beaucoup d'autres réponses ont renvoyé d'autres valeurs.
rwitzel
1
Cela ne fonctionne pas correctement sur Android, car Android regroupe le codec commun 1.2, pour lequel vous avez besoin de cette solution: stackoverflow.com/a/9284092/2413303
EpicPandaForce
76
J'ai trouvé que c'était la façon la plus claire et concise de le faire:
Génial. Il ne tombe pas dans le piège de couper les zéros de tête.
Markus Pscheidt
2
Attention, cela ne fonctionnera pas pour Android si vous utilisez un niveau API <19, mais il vous suffit de modifier la deuxième ligne avec md5.update (string.getBytes ("UTF-8")); Cela ajoutera une autre exception vérifiée à gérer, cependant ...
Fran Marzoa
34
Trouvé cette solution qui est beaucoup plus propre en termes de récupération d'une représentation String à partir d'un hachage MD5.
import java.security.*;import java.math.*;publicclass MD5 {publicstaticvoid main(String args[])throwsException{String s="This is a test";MessageDigest m=MessageDigest.getInstance("MD5");
m.update(s.getBytes(),0,s.length());System.out.println("MD5: "+newBigInteger(1,m.digest()).toString(16));}}
Pourquoi cette réponse -1 alors que l'autre réponse, plus courte et moins descriptive a +146?
Nilzor
4
Agréable en utilisant BigInteger pour obtenir une valeur hexadécimale +1
Dave.B
5
Je viens de découvrir que dans certains cas, cela ne génère que 31 caractères de long MD5, pas 32 comme il se doit
kovica
3
@kovica c'est parce que les zéros de départ sont tronqués si je me souviens bien .. String.format("%032x", new BigInteger(1, hash)); Cela devrait résoudre ce problème. 'hachage' est l'octet [] du hachage.
Je n'ai vu qu'une seule ligne qui n'utilise pas de bibliothèque externe.
holmis83
À moins que je ne me trompe, cela revient toujours en majuscule qui ne s'alignera pas avec les md5 fabriqués sans utiliser d'hex. Pas même vraiment sûr que c'est un vrai md5
walshie4
2
@ walshie4 il n'y a pas de MD5 sans hex (voir ietf.org/rfc/rfc1321.txt ), pour le mettre en minuscules, ajoutez simplement .toLower (). Comparez les résultats aux exemples dans par exemple en.wikipedia.org/wiki/MD5 alors vous aurez une meilleure chance de croire que le code de la bibliothèque Javas est correct.
stacker
28
J'ai une classe (Hash) pour convertir du texte brut en hachage dans les formats: md5 ou sha1, simillar que php fonctionne ( md5 , sha1 ):
publicclassHash{/**
*
* @param txt, text in plain format
* @param hashType MD5 OR SHA1
* @return hash in hashType
*/publicstaticString getHash(String txt,String hashType){try{
java.security.MessageDigest md = java.security.MessageDigest.getInstance(hashType);byte[] array = md.digest(txt.getBytes());StringBuffer sb =newStringBuffer();for(int i =0; i < array.length;++i){
sb.append(Integer.toHexString((array[i]&0xFF)|0x100).substring(1,3));}return sb.toString();}catch(java.security.NoSuchAlgorithmException e){//error action}returnnull;}publicstaticString md5(String txt){returnHash.getHash(txt,"MD5");}publicstaticString sha1(String txt){returnHash.getHash(txt,"SHA1");}}
La réponse de Bombe est correcte, cependant, notez qu'à moins que vous ne deviez absolument utiliser MD5 (par exemple forcé sur vous pour l'interopérabilité), un meilleur choix est SHA1 car MD5 a des faiblesses pour une utilisation à long terme.
Je dois ajouter que SHA1 a également des vulnérabilités théoriques, mais pas aussi graves. L'état actuel de la technique du hachage est qu'il existe un certain nombre de fonctions de hachage de remplacement candidates, mais aucune n'est encore apparue comme la meilleure pratique standard pour remplacer SHA1. Ainsi, selon vos besoins, il serait judicieux de rendre votre algorithme de hachage configurable afin qu'il puisse être remplacé à l'avenir.
Pourriez-vous m'indiquer quelques ressources, où je peux lire sur les mérites et les faiblesses relatifs de chacun?
Akshay
Le mieux que vous puissiez faire pour le moment est probablement d'utiliser SHA1 et d'être prêt à le remplacer à l'avenir. Vous pouvez utiliser des fonctions plus récentes mais elles n'ont pas encore fait l'objet de nombreuses recherches. Vous pouvez suivre les ressources de sécurité en ligne pour savoir quand cela changera - par exemple le blog de Bruce Schneier.
frankodwyer
7
SHA1 est exagéré sauf si vous voulez un hachage cryptographiquement sécurisé, c'est-à-dire que vous ne voulez pas que le hachage aide à reconstruire le message d'origine, ni que vous souhaitez qu'un attaquant intelligent crée un autre message qui correspond au hachage. Si l'original n'est pas un secret et que le hachage n'est pas utilisé pour la sécurité, MD5 est rapide et facile. Par exemple, Google Web Toolkit utilise des hachages MD5 dans les URL JavaScript (par exemple, foo.js? Hash = 12345).
Il s'agit d'une bibliothèque solide et autonome avec des dépendances minimales. Bon produit.
Ajax
Je l'ai trouvé très utile. Il a fallu 15357 ms pour un fichier de 4,57 Go tandis que l'implémentation Java intégrée a pris 19094 ms.
bkrish
11
Je ne sais pas si cela est pertinent pour quiconque lit ceci, mais je viens de rencontrer le problème que je voulais
télécharger un fichier à partir d'une URL donnée et
comparer son MD5 à une valeur connue.
Je voulais le faire avec des classes JRE uniquement (pas d'Apache Commons ou similaire). Une recherche rapide sur le Web ne m'a pas montré d'exemples d'extraits de code faisant les deux en même temps, uniquement chaque tâche séparément. Parce que cela nécessite de lire deux fois le même fichier, j'ai pensé qu'il pourrait être utile d'écrire du code qui unifie les deux tâches, calculant la somme de contrôle à la volée lors du téléchargement du fichier. Voici mon résultat (désolé si ce n'est pas du Java parfait, mais je suppose que vous avez quand même l'idée):
Oh BTW, avant que quiconque sauf moi ne remarque à quel point ma connaissance de JRE est vraiment mauvaise: je viens de découvrir DigestInputStream et DigestOutputStream . Je vais modifier ma solution d'origine pour refléter ce que je viens d'apprendre.
kriegaex
6
Jetez un œil au lien suivant, l'exemple obtient un hachage MD5 d'une image fournie:
Hash MD5 d'une image
Pour ce que ça vaut, je suis tombé dessus parce que je veux synthétiser des GUID à partir d'une clé naturelle pour un programme qui installera des composants COM; Je souhaite créer une taille afin de ne pas gérer le cycle de vie du GUID. J'utiliserai MD5, puis j'utiliserai la classe UUID pour en extraire une chaîne. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 soulève ce problème).
Dans tous les cas, java.util.UUID peut vous obtenir une jolie chaîne à partir des octets MD5.
en fait, il accepte non seulement le tableau d'octets MD5 (taille == 16). Vous pouvez passer un tableau d'octets de n'importe quelle longueur. Il sera converti en tableau d'octets MD5 au moyen de MD5 MessageDigest(voir le code source nameUUIDFromBytes () )
Contrairement à PHP où vous pouvez faire un hachage MD5 de votre texte en appelant simplement la fonction md5, c'est md5($text)-à- dire qu'en Java, cela a été rendu un peu compliqué. Je l'ai généralement implémenté en appelant une fonction qui renvoie le texte de hachage md5. Voici comment je l'ai implémenté, créez d'abord une fonction nommée à l' md5hashingintérieur de votre classe principale comme indiqué ci-dessous.
publicstaticString md5hashing(String text){String hashtext =null;try{String plaintext = text;MessageDigest m =MessageDigest.getInstance("MD5");
m.reset();
m.update(plaintext.getBytes());byte[] digest = m.digest();BigInteger bigInt =newBigInteger(1,digest);
hashtext = bigInt.toString(16);// Now we need to zero pad it if you actually want the full 32 chars.while(hashtext.length()<32){
hashtext ="0"+hashtext;}}catch(Exception e1){// TODO: handle exceptionJOptionPane.showMessageDialog(null,e1.getClass().getName()+": "+ e1.getMessage());}return hashtext;}
Appelez maintenant la fonction chaque fois que vous en avez besoin, comme indiqué ci-dessous.
String text = textFieldName.getText();String pass = md5hashing(text);
Ici, vous pouvez voir que le hashtext est ajouté avec un zéro pour le faire correspondre avec le hachage md5 en PHP.
MD5 est parfaitement bien si vous n'avez pas besoin de la meilleure sécurité, et si vous faites quelque chose comme la vérification de l'intégrité des fichiers, la sécurité n'est pas une considération. Dans ce cas, vous voudrez peut-être envisager quelque chose de plus simple et plus rapide, comme Adler32, qui est également pris en charge par les bibliothèques Java.
Qu'est-ce qui vous fait penser que l'intégrité des fichiers n'est pas un problème de sécurité?
Jeremy Huiskamp
5
celui-ci donne le md5 exact que vous obtenez de la fonction md5 de mysql ou des fonctions md5 de php etc. C'est celui que j'utilise (vous pouvez changer en fonction de vos besoins)
C'est probablement la pire solution car elle supprime les zéros de tête.
Jannick
4
import java.security.MessageDigest
val digest =MessageDigest.getInstance("MD5")//Quick MD5 of text
val text ="MD5 this text!"
val md5hash1 = digest.digest(text.getBytes).map("%02x".format(_)).mkString
//MD5 of text with updates
digest.update("MD5 ".getBytes())
digest.update("this ".getBytes())
digest.update("text!".getBytes())
val md5hash2 = digest.digest().map(0xFF& _).map("%02x".format(_)).mkString
//Output
println(md5hash1 +" should be the same as "+ md5hash2)
Vous pouvez générer un hachage MD5 pour un texte donné en utilisant les méthodes de la MessageDigestclasse du java.securitypackage. Voici l'extrait de code complet,
La sortie de la fonction MD5 est un hachage de 128 bits représenté par 32 nombres hexadécimaux.
Dans le cas, si vous utilisez une base de données comme MySQL, vous pouvez également le faire de manière plus simple. La requête Select MD5(“text here”)renverra le hachage MD5 du texte entre crochets.
Réponses:
Vous en avez besoin
java.security.MessageDigest
.Appel
MessageDigest.getInstance("MD5")
pour obtenir une instance MD5 queMessageDigest
vous pouvez utiliser.Le calcul du hachage en effectuant l'une des actions suivantes:
byte[]
et calculez le hachage en une seule opération avecmd.digest(bytes)
.MessageDigest
unbyte[]
morceau à la fois en appelantmd.update(bytes)
. Lorsque vous avez terminé d'ajouter des octets d'entrée, calculez le hachage avecmd.digest()
.Le
byte[]
retourné parmd.digest()
est le hachage MD5.la source
MessageDigest
vous permet de saisir les données par blocs. Ce ne serait pas possible avec une méthode statique. Bien que vous puissiez affirmer qu'ils auraient dû en ajouter un de toute façon pour plus de commodité lorsque vous pouvez transmettre toutes les données à la fois.La
MessageDigest
classe peut vous fournir une instance du résumé MD5.Lorsque vous travaillez avec des chaînes et les classes de chiffrement, assurez-vous de toujours spécifier l'encodage dans lequel vous souhaitez que la représentation en octets soit utilisée. Si vous l'utilisez,
string.getBytes()
elle utilisera la plate-forme par défaut. (Toutes les plateformes n'utilisent pas les mêmes valeurs par défaut)Si vous avez beaucoup de données, jetez un œil à la
.update(byte[])
méthode qui peut être appelée à plusieurs reprises. Appelez ensuite.digest()
pour obtenir le hachage résultant.la source
yourString.getBytes(StandardCharsets.UTF_8)
. Cela empêche la manipulation d'un fichierUnsupportedEncodingException
.Si vous voulez réellement que la réponse soit une chaîne par opposition à un tableau d'octets, vous pouvez toujours faire quelque chose comme ceci:
la source
hashtext = "0".repeat(32 - hashtext.length()) + hashtext
place de lawhile
, afin que les éditeurs ne vous avertissent pas que vous effectuez une concaténation de chaînes dans une boucle.Vous pouvez également consulter la classe DigestUtils du projet de codec apache commons , qui fournit des méthodes très pratiques pour créer des résumés MD5 ou SHA.
la source
Trouvé ceci:
sur le site ci-dessous, je n'en prends aucun crédit, mais c'est une solution qui fonctionne! Pour moi, beaucoup d'autres codes ne fonctionnaient pas correctement, j'ai fini par manquer des 0 dans le hachage. Celui-ci semble être le même que PHP. source: http://m2tec.be/blog/2010/02/03/java-md5-hex-0093
la source
getBytes()
, sinon votre code obtiendra des résultats différents sur différentes plates-formes / paramètres utilisateur.byte[] array = md.digest(md5.getBytes(Charset.forName("UTF-8")));
Voici comment je l'utilise:
où se trouve Hex:
org.apache.commons.codec.binary.Hex
du projet Apache Commons .la source
String result = Hex.encodeHexString(resultByte);
Je viens de télécharger commons-codec.jar et j'ai obtenu un php parfait comme md5. Voici le manuel .
Importez-le simplement dans votre projet et utilisez
Et voila.
la source
J'ai trouvé que c'était la façon la plus claire et concise de le faire:
la source
Trouvé cette solution qui est beaucoup plus propre en termes de récupération d'une représentation String à partir d'un hachage MD5.
Le code a été extrait d' ici .
la source
String.format("%032x", new BigInteger(1, hash));
Cela devrait résoudre ce problème. 'hachage' est l'octet [] du hachage.Une autre option consiste à utiliser les méthodes de hachage de goyave :
Pratique si vous utilisez déjà la goyave (si vous ne l'êtes pas, vous devriez probablement l'être).
la source
Hashing.md5().hashString("my string").asBytes();
Une autre implémentation:
la source
J'ai une classe (Hash) pour convertir du texte brut en hachage dans les formats: md5 ou sha1, simillar que php fonctionne ( md5 , sha1 ):
Test avec JUnit et PHP
Script PHP:
Script PHP de sortie:
Utiliser l'exemple et tester avec JUnit:
Code dans GitHub
la source
Pas besoin de compliquer les choses.
DigestUtils fonctionne bien et vous rend confortable lorsque vous travaillez avec des
md5
hachages.ou
Soit vous pouvez utiliser toute autre méthode de cryptage telle que
sha
oumd
.la source
Ma réponse peu révélatrice:
la source
String.format("%1$032X", big)
d'avoir un format majusculeIl y a un
DigestUtils
classe au printemps :http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/util/DigestUtils.html
Cette classe contient la méthode
md5DigestAsHex()
qui fait le travail.la source
Vous pouvez essayer de suivre. Voir les détails et télécharger les codes ici: http://jkssweetlife.com/java-hashgenerator-md5-sha-1/
la source
La réponse de Bombe est correcte, cependant, notez qu'à moins que vous ne deviez absolument utiliser MD5 (par exemple forcé sur vous pour l'interopérabilité), un meilleur choix est SHA1 car MD5 a des faiblesses pour une utilisation à long terme.
Je dois ajouter que SHA1 a également des vulnérabilités théoriques, mais pas aussi graves. L'état actuel de la technique du hachage est qu'il existe un certain nombre de fonctions de hachage de remplacement candidates, mais aucune n'est encore apparue comme la meilleure pratique standard pour remplacer SHA1. Ainsi, selon vos besoins, il serait judicieux de rendre votre algorithme de hachage configurable afin qu'il puisse être remplacé à l'avenir.
la source
Une autre implémentation: Fast MD5 Implementation in Java
la source
Je ne sais pas si cela est pertinent pour quiconque lit ceci, mais je viens de rencontrer le problème que je voulais
Je voulais le faire avec des classes JRE uniquement (pas d'Apache Commons ou similaire). Une recherche rapide sur le Web ne m'a pas montré d'exemples d'extraits de code faisant les deux en même temps, uniquement chaque tâche séparément. Parce que cela nécessite de lire deux fois le même fichier, j'ai pensé qu'il pourrait être utile d'écrire du code qui unifie les deux tâches, calculant la somme de contrôle à la volée lors du téléchargement du fichier. Voici mon résultat (désolé si ce n'est pas du Java parfait, mais je suppose que vous avez quand même l'idée):
la source
Jetez un œil au lien suivant, l'exemple obtient un hachage MD5 d'une image fournie: Hash MD5 d'une image
la source
Pour ce que ça vaut, je suis tombé dessus parce que je veux synthétiser des GUID à partir d'une clé naturelle pour un programme qui installera des composants COM; Je souhaite créer une taille afin de ne pas gérer le cycle de vie du GUID. J'utiliserai MD5, puis j'utiliserai la classe UUID pour en extraire une chaîne. (http://stackoverflow.com/questions/2190890/how-can-i-generate-guid-for-a-string-values/12867439 soulève ce problème).
Dans tous les cas, java.util.UUID peut vous obtenir une jolie chaîne à partir des octets MD5.
la source
MessageDigest
(voir le code source nameUUIDFromBytes () )la source
Contrairement à PHP où vous pouvez faire un hachage MD5 de votre texte en appelant simplement la fonction md5, c'est
md5($text)
-à- dire qu'en Java, cela a été rendu un peu compliqué. Je l'ai généralement implémenté en appelant une fonction qui renvoie le texte de hachage md5. Voici comment je l'ai implémenté, créez d'abord une fonction nommée à l'md5hashing
intérieur de votre classe principale comme indiqué ci-dessous.Appelez maintenant la fonction chaque fois que vous en avez besoin, comme indiqué ci-dessous.
Ici, vous pouvez voir que le hashtext est ajouté avec un zéro pour le faire correspondre avec le hachage md5 en PHP.
la source
MD5 est parfaitement bien si vous n'avez pas besoin de la meilleure sécurité, et si vous faites quelque chose comme la vérification de l'intégrité des fichiers, la sécurité n'est pas une considération. Dans ce cas, vous voudrez peut-être envisager quelque chose de plus simple et plus rapide, comme Adler32, qui est également pris en charge par les bibliothèques Java.
la source
celui-ci donne le md5 exact que vous obtenez de la fonction md5 de mysql ou des fonctions md5 de php etc. C'est celui que j'utilise (vous pouvez changer en fonction de vos besoins)
la source
essaye ça:
la source
la source
Vous pouvez générer un hachage MD5 pour un texte donné en utilisant les méthodes de la
MessageDigest
classe dujava.security
package. Voici l'extrait de code complet,La sortie de la fonction MD5 est un hachage de 128 bits représenté par 32 nombres hexadécimaux.
Dans le cas, si vous utilisez une base de données comme MySQL, vous pouvez également le faire de manière plus simple. La requête
Select MD5(“text here”)
renverra le hachage MD5 du texte entre crochets.la source
Voici pourquoi je suis venu ici - une fonction scala pratique qui renvoie une chaîne de hachage MD5:
la source
Il y a un article sur Codingkit à ce sujet. Consultez: http://codingkit.com/a/JAVA/2013/1020/2216.html
la source