Noções básicas: uso da classe Messagedigest
De fato, para concluir a criptografia do MD5 em Java, a maior parte da classe Messagedigest ajudará você a implementá -la, e algumas linhas de código são suficientes:
/** * Criptografar a string md5 * * @param str * @return */importar java.security.messagedigest; public static string getMd5 (string str) {tente {// gerar um cálculo de criptografia md5 diGest Messagedigest md = Messagedigest.ssagest.getInStance ("md5"); // calcule a função md5 md.update (str.getBytes ()); // Digest () finalmente determina que o valor do hash do MD5 retorna e o valor de retorno é 8 como uma string. Como o valor do hash MD5 é um valor hexadecimal de 16 bits, na verdade é uma função de caractere de 8 bits // biginteger converte uma sequência de 8 bits em um valor hexadecimal de 16 bits e o representa como uma string; Obtém o valor do hash na forma de uma string retorna new biginteger (1, md.digest ()). ToString (16); } catch (Exceção e) {lança nova SpeedException ("Ocorreu o erro de criptografia MD5"); }} Avançado: criptografia e descriptografia
Java implementa as classes de criptografia e descriptografia do MD5, com aulas de teste, consulte o código para obter detalhes.
Classe de criptografia e descriptografia MD5 - MyMd5util, o código é o seguinte
pacote com.zyg.security.md5; importar java.io.unsupportEnDencodingException; importar java.security.messagedigest; importar java.security.nosuchalgorithMexception; import java.security.cretandom; import java.util.Arrays; Hex_nums_str = "0123456789abcdef"; Inteiro final estático privado Salt_length = 12; / ** * Converta strings hexáticos em matriz de bytes * @param hex * @return * / public static byte [] hexstringTobyte (string hex) {int len = (hex.length () / 2); byte [] resultado = novo byte [len]; char [] hexchars = hex.toCharArray (); for (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; } / ** * Converta a matriz de bytes especificada em uma string 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] e 0xff); if (hex.Length () == 1) {hex = '0' + hex; } hexstring.append (hex.ToupPercase ()); } retornar hexstring.toString (); } /** * Verifique se a senha é legal * @param senha * @param senhandB * @return * @THOWS NosuchalgorithMexception * @Throws UnsupportEnCodingException * /public static boolean vidalpassword (string senha, string senha) lança nosuchalgorStTexptEnPortEng (string senha) Throws NoSuchalGorStExcean, unsupportMord (senha de string) byte [] pwdindb = hexstringTobyte (senhandB); // Declare o byte variável de sal [] sal = novo byte [Salt_length]; // extraia o sal da matriz de bytes salva no banco de dados System.arraycopy (pwdindb, 0, sal, 0, sal_length); // Crie a mensagem Digest Object MessAgedigest md = Messagedigest.getInstance ("md5"); // Pausa os dados do sal no objeto Digest Mess. // Passa os dados da senha para o objeto Digest Mess. // gerar o resumo da mensagem do byte de senha de entrada [] Digest = md.digest (); // Declare uma variável que salva o resumo da mensagem da senha no banco de dados byte [] Digestindb = new Byte [pwdindb.length - Salt_length]; // Obtenha o resumo da mensagem da senha no banco de dados System.ArrayCopy (PWDindB, SALT_LENGLE, DIGESTINDB, 0, DIGESTINDB.Length); // Compare se o resumo da mensagem gerado com base na senha de entrada é o mesmo que a mensagem Digest no banco de dados if (Arrays.equals (digery, digerIndB)) {// senha retorna corretamente a mensagem de correspondência de senha retorna true; } else {// senha incorreto retorna a mensagem de incompatibilidade de senha retorna false; }} /** * Obtenha a senha hexadecimal criptografada * @param senha * @return * @throws nosuchalgorithMexception * @throws UnsupportEnDencodingException * /public static string getSportEdPwd (string senha) lança nosuchalGoritHeeTextyTExtExtingEn (string) byte [] pwd = null; // gerador de números aleatórios Securerendom Random = new SecureRandom (); // Declare o byte variável da matriz de sal [] sal = novo byte [Salt_length]; // coloque o número aleatório na variável de sal aleatória.nextBytes (sal); // Declare a mensagem Digest Object Messagedigest md = null; // Crie a mensagem Digest md = Messagedigest.getInstance ("md5"); // Pausa os dados do sal no objeto Digest Mess. // passa os dados da senha para o Mensagem Digest Object md.update (senha.getBytes ("utf-8")); // Obtenha a matriz de bytes da mensagem Digest Byte [] Digest = md.digest (); // porque o sal deve ser armazenado na matriz de bytes da senha, adicione o comprimento do byte do sal PWD = novo byte [Digest.Length + Salt_Length]; // Copie os bytes do sal para os 12 primeiros bytes da matriz de bytes de senha criptografada gerada, para tirar o sal ao verificar o sistema de senha. // Copie a mensagem Digest para os bytes na matriz de bytes de senha criptografada, começando no 13º Byte System.arraycopy (Digest, 0, PWD, Salt_Length, Digest.Length); // Converter o formato de matriz de bytes criptografado em uma senha em uma senha hexadecimal string senha retornar bytetoHexString (PWD); }}Classe de teste - Cliente, o código é o seguinte:
pacote com.zyg.security.md5; importar java.io.unsupportEncodingException; importar java.security.nosuchalgorithMexception; importar java.util.hashmap; importar java.util.map; public static void main (string [] args) {string userName = "zyg"; String senha = "123"; RegisterUser (nome de usuário, senha); nome de usuário = "chtopong"; senha = "456"; RegisterUser (nome de usuário, senha); String LoginUserID = "zyg"; String pwd = "1232"; tente {if (LoginValid (LoginUserID, PWD)) {System.out.println ("Bem -vindo ao Login !!!"); } else {System.out.println ("Erro de senha, por favor, volte a entrar !!!"); }} catch (nosuchalgorithMexception e) {// TODO BLOCO DE CATAGEM AUTOGERATO E.PRINTSTACKTRACE (); } Catch (UnsupportEdEnCodingException e) {// TODO BLOCO DE CATAGEM AUTOGERATO E.PRINTSTACKTRACE (); }} / ** * Usuário registrado * * @param nome de usuário * @param senha * / public static void RegisterUser (nome de usuário da string, string senha) {string EncryPtedPwd = null; tente {EncryptedPwd = mymd5util.getEncryptedpwd (senha); users.put (nome de usuário, cripryptedpwd); } catch (nosuchalgorithMexception e) {// TODO BLOCO DE CATAGEM AUTOGERATION E.PRINTSTACKTRACE (); } Catch (UnsupportEdEnCodingException e) {// TODO BLOCO DE CATAGEM AUTOGERATO E.PRINTSTACKTRACE (); }} / ** * Login de verificação * * @param nome de usuário * @param senha * @return * @THOWS UnsupportEdEncodingException * @THOWS NosuchalgorithMexception * / public static boolean LogInVorgId (String Username, String senha) lança NosuchalGoritExCexceMcença, UnsworpGortDortEd (String Username, senha) (String) users.get (nome de usuário); if (null! = pwdindb) {// Este usuário existe retorna mymd5util.validpassword (senha, pwdindb); } else {System.out.println ("Este usuário não existe!!!"); retornar falso; }}}PS: Aqui estão mais duas ferramentas de criptografia MD5 para você. Amigos interessados podem se referir a ele:
Ferramenta de criptografia online do MD5:
http://tools.vevb.com/password/createmd5password
Online md5/hash/sha-1/sha-2/sha-256/sha-512/sha-3/ripemd-160 ferramenta de criptografia:
http://tools.vevb.com/password/hash_md5_sha