Bases: utilisation de la classe Messagedigest
En fait, pour terminer le cryptage MD5 en Java, la plupart de la classe Messagedigest vous aidera à l'implémenter, et quelques lignes de code sont suffisantes:
/ ** * Crypt la chaîne md5 * * @param str * @return * / import java.security.MessagediGest; public static static getmd5 (String str) {try {// générer un calcul de cryptage MD5 MessagediGest md = messagedigest.getInstance ("md5"); // Calculez la fonction md5 md.update (str.getBytes ()); // digest () détermine enfin que la valeur de hachage MD5 renvoie et que la valeur de retour est 8 en tant que chaîne. Étant donné que la valeur de hachage MD5 est une valeur hexadécimale 16 bits, il s'agit en fait d'une fonction de caractère 8 bits // bigInteger convertit une chaîne 8 bits en une valeur hexagonale 16 bits et la représente comme une chaîne; Obtient la valeur de hachage sous la forme d'une chaîne de retour new BigInteger (1, md.digest ()). ToString (16); } Catch (Exception E) {Throw New SpeedException ("Erreur de cryptage MD5 s'est produite"); }} Avancé: cryptage et décryptage
Java implémente les classes de cryptage et de décryptage MD5, avec des classes de test, voir le code pour plus de détails.
Classe de cryptage et de décryptage MD5 - Mymd5util, le code est le suivant
Package com.zyg.security.md5; import java.io.unsupportedEncodingException; Importer java.security.MessagediGest; import java.security.nosuchalgorithmexception; import java.security.securerandom; import java.util.array Hex_nums_str = "0123456789abcdef"; entier final statique privé Salt_length = 12; / ** * Convertir les chaînes hexadécimales en tableau d'octets * @param hex * @return * / byte statique public [] hexStringtoByte (String hex) {int len = (hex.length () / 2); octet [] résultat = nouveau octet [len]; char [] hexchars = hex.tocharay (); pour (int i = 0; i <len; i ++) {int pos = i * 2; résultat [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | hex_nums_str.indexof (hexchars [pos + 1])); } Retour Résultat; } / ** * Convertir le tableau d'octet spécifié en une chaîne hexagonale * @param b * @return * / public static String byToHExString (byte [] b) {StringBuffer hexstring = new StringBuffer (); for (int i = 0; i <b.length; i ++) {String hex = Integer.tohexString (b [i] & 0xff); if (hex.length () == 1) {hex = '0' + hex; } hexstring.append (hex.touppercase ()); } return hexstring.toString (); } / ** * Vérifiez si le mot de passe est légal * @param mot de passe * @param mot de passe-MotyIndB * @return * @throws NosuchalgorithMexception * @Throws UnsupporTeDencodingException * / public static boolean validpassword (String PasswordIndB) lance NosuchalgorithMexception, UsuPporTeDencoming byte array [] pwDindb = hexStringToByte (mot de passeInDB); // Déclarer l'octet variable de sel [] Salt = nouveau octet [Salt_length]; // Extraire le sel du tableau d'octets enregistré dans le système de base de données. // Créez le message Digest Object MessagediGest MD = MessagediGest.getInstance ("MD5"); // Pause les données de sel dans l'objet de digest de message MD.update (sel); // transmettez les données de mot de passe à l'objet Message Digest MD.update (mot de passe.GetBytes ("UTF-8")); // Générez le message de message du mot de passe d'entrée byte [] digest = md.digest (); // Déclare une variable qui enregistre le digestion du message du mot de passe dans l'octet de base de données [] digestIndB = new byte [pwdindb.length - salt_length]; // Obtenez le message de message du mot de passe dans le système de base de données.ArrayCopy (PWDindb, Salt_length, DigesIndB, 0, DigesIndB.Length); // Comparez si le digestion du message généré en fonction du mot de passe d'entrée est le même que le message de message dans la base de données if (arrays.equals (digest, digestIndB)) {// mot de passe renvoie correctement le mot de passe de mot de passe du message de correspondance return true; } else {// mot de passe incorrect renvoie le message de décalage de mot de passe return false; }} / ** * Obtenez le mot de passe hexadécimal crypté * @param mot de passe * @return * @throws nosuchalgorithMexception * @Throws UnportEdenCcodingException * / public static string getCryptedPwd (String Password) lance NosuchalgorithMexception, UnsupportedEnDingexception {//clarent the EncryEd Array octet [] pwd = null; // Numéro aléatoire Générateur SecureRandom Random = new SecureRandom (); // DÉCLARIEZ L'OYTE VARIABLE DE RABIÈRE SALL [] SALT = NOUVEAU BYTE [SALT_LENGTH]; // Mettez le nombre aléatoire dans la variable de sel aléatoire.NextBytes (sel); // Déclare le message Digest Object MessagediGest md = null; // Créer le message Digest MD = MessagediGest.getInstance ("MD5"); // Pause les données de sel dans l'objet de digest de message MD.update (sel); // transmette les données du mot de passe à l'objet de digest de message md.update (mot de passe.getBytes ("utf-8")); // Obtenez le tableau d'octets du message de digest byte [] digest = md.digest (); // Parce que le sel doit être stocké dans le tableau d'octets du mot de passe, ajoutez la longueur d'octets du sel PWD = nouveau octet [digest.length + salt_length]; // Copiez les octets du sel dans les 12 premiers octets du réseau d'octets de mot de passe crypté généré, afin de faire sortir le sel lors de la vérification du système de mot de passe.arraycopy (sel, 0, pwd, 0, salt_length); // Copiez le message du message dans les octets dans le tableau d'octet de mot de passe crypté à partir du 13ème octet System.ArrayCopy (Digest, 0, Pwd, Salt_Length, Digest.length); // Convertir le format de tableau d'octet crypté de mot de passe en un format de chaîne hexadécimal retour de mot de passe RETOUR BYTETOHEXSTRING (PWD); }}Classe de test - Client, le code est le suivant:
package com.zyg.security.md5; import java.io.unsupportedencodingException; importer java.security.nosuchalgorithMexception; import java.util.hashmap; import java.util.map; Client de classe publique {useurs de map statique privée = new hashmap (); public static void main (String [] args) {String username = "zyg"; String mot de passe = "123"; registreUser (nom d'utilisateur, mot de passe); username = "Changong"; mot de passe = "456"; registreUser (nom d'utilisateur, mot de passe); String LoginUserID = "ZYG"; String pwd = "1232"; essayez {if (loginValid (loginUserId, pwd)) {System.out.println ("Bienvenue à Login !!!"); } else {System.out.println ("Erreur de mot de passe, veuillez rentrer !!!"); }} catch (NosuchalgorithMexception e) {// TODO Block de catch généré par Auto E.PrintStackTrace (); } catch (UnportEnCoDingException e) {// Bloc de catch généré automatiquement de TODO E.PrintStackTrace (); }} / ** * Utilisateur enregistré * * @param nom d'utilisateur * @param mot de passe * / public static void registerUser (String Username, String Motway) {String EncryptedPwd = null; essayez {encryptedpwd = mymd5util.getCryptedPwd (mot de passe); users.put (nom d'utilisateur, EncryptedPwd); } Catch (NosuchalgorithMexception e) {// Bloc de capture généré automatiquement de TODO E.PrintStackTrace (); } catch (UnportEnCoDingException e) {// Bloc de catch généré automatiquement de TODO E.PrintStackTrace (); }} / ** * Login de vérification * * @param nom d'utilisateur * @param mot de passe * @Return * @throws UnportEdencodingException * @Throws NosuchalgorithMexception * / public static boolean LoginValid (String Username, String Motway (String) Users.get (nom d'utilisateur); if (null! = pwDindb) {// Cet utilisateur existe renvoyer mymd5util.validpassword (mot de passe, pwDindb); } else {System.out.println ("Cet utilisateur n'existe pas!!"); retourne false; }}}PS: Voici deux autres outils de cryptage MD5 pour vous. Les amis intéressés peuvent y faire référence:
Outil de cryptage en ligne MD5:
http://tools.vevb.com/password/createmd5password
MD5 / HASH / SHA-1 / SHA-2 / SHA-256 / SHA-512 / SHA-3 / RIMEMD-160 Tool:
http://tools.vevb.com/password/hash_md5_sha