Conceptos básicos: Uso de la clase MessageDigest
De hecho, para completar el cifrado MD5 en Java, la mayor parte de la clase Messagedigest lo ayudará a implementarlo, y algunas líneas de código son suficientes:
/** * CORRYPE LA STRING MD5 * * @param str * @return */import java.security.messageGest; public static string getMd5 (string str) {try {// Generar un cálculo de cifrado MD5 Digest MessageDigest md = MessageGest.getInstance ("MD5"); // Calcule la función md5 md.update (str.getbytes ()); // Digest () finalmente determina que el valor de hash MD5 regresa, y el valor de retorno es 8 como una cadena. Debido a que el valor de hash MD5 es un valor hexadecimal de 16 bits, en realidad es un carácter de 8 bit // la función BigInteger convierte una cadena de 8 bits en un valor hexadecimal de 16 bits, y lo representa como una cadena; Obtiene el valor hash en forma de una cadena return nueva biginteger (1, md.digest ()). toString (16); } Catch (Exception e) {Throw New SpeedException ("Se produjo un error de cifrado MD5"); }} Avanzado: cifrado y descifrado
Java implementa clases de cifrado y descifrado MD5, con clases de prueba, consulte el código para más detalles.
Clase de cifrado y descifrado MD5 - mymd5util, el código es el siguiente
paquete com.zyg.security.md5; import java.io.unsupportedEncodingException; import java.security.messageGest; import java.security.nosuchalgorithMexexception; import java.seSecurity.secureerandom; import java.util.arrays; public class mymd5utilil Hex_nums_str = "0123456789abcdef"; Integer final estático privado Salt_Length = 12; / ** * Convierta las cadenas Hex en la matriz de bytes * @param hex * @return * / public static byte [] hexstringtobyte (string hex) {int len = (hex.length () / 2); byte [] resultado = nuevo byte [len]; char [] hexchars = hex.toCarArray (); para (int i = 0; i <len; i ++) {int pos = i * 2; resultado [i] = (byte) (hex_nums_str.indexof (hexchars [pos]) << 4 | hex_nums_str.indexof (hexchars [pos + 1])); } resultado de retorno; } / ** * Convierta la matriz de Byte especificada en una cadena hexadecimal * @param b * @return * / public static string bytetohexstring (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 (); } /** * Verifique si la contraseña es legal * @param contraseña * @param contraseñaindb * @return * @throws nosuchalgorithMexception * @throws UnsupportedEncodingEntingException * /public static boolean ValidPassword (String Password, String PasswordS). byte [] pwdindb = hexStringTobyte (contraseña); // declarar la variable de sal [] sal = new byte [sal_length]; // Extraiga la sal de la matriz de bytes guardada en el sistema de la base de datos. // Crear el objeto Digest del mensaje MessageGest md = MessageDigest.getInstance ("MD5"); // Pausa los datos de sal en el objeto Digest de mensaje md.update (sal); // Pase los datos de contraseña al objeto Digest de mensajes md.update (contraseña.getBytes ("UTF-8")); // Generar el resumen del mensaje del byte de contraseña de entrada [] digest = md.digest (); // declara una variable que guarda el resumen del mensaje de la contraseña en la base de datos byte [] digestIndb = new Byte [pwdindb.length - sal_length]; // Obtener el resumen del mensaje de la contraseña en el sistema de la base de datos. // Compare si el resumen de mensajes generado en función de la contraseña de entrada es lo mismo que el digest de mensajes en la base de datos if (arrays.equals (digest, digestB)) {// La contraseña devuelve correctamente la contraseña de coincidir el mensaje de coincidencia return verdadero; } else {// contraseña incorrecta Devuelve contraseña Mensaje de desajuste return false; }} /** * Obtenga la contraseña hexadecimal cifrada * @param contraseña * @return * @throws nosuchalgorithMexexception * @throws unsupportedEncodingEntingException * /public static string getenCryPpwd (cadena contraseña) tira nosuchalgorithMexException, desesportado en byte [] pwd = null; // generador de números aleatorios SecurerAndom Random = new SecureRandom (); // declarar la variable de matriz de sal [] sal = new Byte [sal_length]; // colocar el número aleatorio en la variable de sal random.nextbytes (sal); // declarar el objeto de digestión de mensaje MessageDigest md = null; // Crear el mensaje Digest md = MessageDigest.getInstance ("MD5"); // Pausa los datos de sal en el objeto Digest de mensaje md.update (sal); // Pase los datos de la contraseña al objeto Digest de mensajes md.update (contraseña.getbytes ("utf-8")); // Obtener la matriz de bytes del mensaje Digest Byte [] digest = md.digest (); // Debido a que la sal se almacenará en la matriz de bytes de la contraseña, agregue la longitud del byte de la sal pwd = new byte [digest.length + salt_length]; // Copiar los bytes de la sal a los primeros 12 bytes de la matriz de bytes de contraseña cifrada generada, para obtener la sal al verificar el sistema de contraseña. // Copiar el Digest del mensaje a los bytes en la matriz de bytes de contraseña encriptada que comienza desde el 13º Byte System.ArrayCopy (Digest, 0, PWD, Salt_Length, Digest.length); // Convierta el formato de matriz de byte encriptado con contraseña en un formato de cadena hexadecimal contraseña return bytetohexstring (pwd); }}Clase de prueba: cliente, el código es el siguiente:
paquete com.zyg.security.md5; import java.io.unsupportedEncodingException; import java.security.nosuchalgorithmexexception; import java.util.hashmap; import java.util.map Cliente de clase pública {usuarios de mapa estático privado = new Hashmap (); public static void main (string [] args) {String UserName = "Zyg"; Cadena contraseña = "123"; RegisterUser (nombre de usuario, contraseña); nombre de usuario = "Changong"; contraseña = "456"; RegisterUser (nombre de usuario, contraseña); String LoginUserId = "Zyg"; Cadena pwd = "1232"; intente {if (loginValid (loginuserID, pwd)) {system.out.println ("¡Bienvenido a login!"); } else {System.out.println ("Error de contraseña, por favor vuelva a entrar !!!"); }} Catch (nosuchalgorithMexception e) {// toDO Bloque de captura automática E.PrintStackTrace (); } Catch (UnsupportedEnCodingException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); }} / ** * Usuario registrado * * @param username * @param contraseña * / public static void registeruser (string username, string contraseña) {string cifryptedpwd = null; Pruebe {CiCryPTedPWD = myMD5UTIL.GetEnCryPTEDPWD (contraseña); ussers.put (nombre de usuario, encryptedpwd); } Catch (nosuchalgorithMexception e) {// TODO BLOQUE DE CABTA AUTO GENERADA E.PRINTSTACKTRACE (); } Catch (UnsupportedEnCodingException e) {// TODO Auto Generado Bloque E.PrintStackTrace (); }} / ** * Inicio de sesión de verificación * * @param Nombre de usuario * @param contraseña * @return * @throws UnsupportedEncodingException * @throws nosuchalgorithMexexception * / public static boolean loginValid (string usern, string contraseña) arroja (String) usser.get (nombre de usuario); if (null! = pwdindb) {// Este usuario existe return mymd5util.validpassword (contraseña, pwdindb); } else {System.out.println ("¡Este usuario no existe!!!"); devolver falso; }}}PD: Aquí hay dos herramientas de cifrado MD5 más para usted. Los amigos interesados pueden referirse a ello:
Herramienta de cifrado en línea MD5:
http://tools.vevb.com/password/createmd5password
MD5 en línea/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 herramienta de cifrado:
http://tools.vevb.com/password/hash_md5_sha