Messagedigest Class
A classe Messagedigest fornece aos aplicativos a funcionalidade dos algoritmos de resumo da informação, como algoritmos MD5 ou SHA. O Information Digest é uma função de hash de mão única que recebe dados de qualquer tamanho e produz um valor de hash de comprimento fixo.
O objeto Messagedigest começa a ser inicializado. Este objeto processa dados usando o método update (). Você pode chamar o método RESET () a qualquer momento para redefinir o resumo. Depois que todos os dados que precisam ser atualizados forem atualizados, um dos métodos Digest () deve ser chamado para concluir o cálculo do hash.
O método Digest só pode ser chamado uma vez para uma determinada quantidade de dados de atualização. Depois que o resumo é chamado, o objeto Messagedigest é redefinido para seu estado inicial.
ilustrar:
No site, para proteger as informações de privacidade, como nome de usuário e senha do membro do site, criptografamos diretamente no MD5 ou em outras maneiras ao se registrar. Mesmo o administrador do banco de dados não pode visualizar a senha do membro e outras informações. O efeito de senha no banco de dados é como: 8E830882F03B2CB84D1A657F346DD41A Efeito.
Como o algoritmo MD5 é irreversível, é amplamente utilizado por muitos sites.
Três métodos de criptografia comumente usados
Método 1: Use os operadores de bits para converter dados criptografados em método hexadecimal 2: Use o método de formatação para converter dados criptografados em hexadecimal (recomendado)
Método 3: Use o algoritmo para converter os dados criptografados em hexadecimal
import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * Use the MessageDigest class that comes with Java* @author xiaokui */public class EncryptionUtil {/** * Since MD5 and SHA-1 both developed from MD4, their structure and strength characteristics have many similarities* The biggest difference between SHA-1 and MD5 is that its O Digest é de 32 bits mais longo que o Md5 Digest (1Byte = 8 bits, equivalente a 4Bytes de comprimento, 8 caracteres a mais que MD5 após a conversão em hexadecimal). * Para ataques forçados, o MD5 é uma operação da ordem de 2128 e SHA-1 é uma operação da ordem de 2160. * Dificuldade para duas mensagens com o mesmo resumo: o MD5 é uma operação de 264 é uma operação de ordem de magnitude e o SHA-1 é uma operação de ordem de 280 é uma operação de ordem de magnitude. * Portanto, o SHA-1 é mais poderoso contra ataques forçados. No entanto, como o SHA-1 tem mais etapas de ciclo que o MD5 (80:64) e o cache a ser processado é maior (160 bits: 128 bits), o SHA-1 funciona lentamente que o MD5. * * @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public static String getHash(String source, String hashType) {// Characters used to convert bytes into hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; tente {Messagedigest md = Messagedigest.getInstance (hashtype); md.update (fonte.getBytes (); // Processando dados usando o método de atualização, o método de atualização por meio de ser atualizado por Atualização por Atualização (OURTEM. md.digest (); // Obtenha o texto cifrado para completar o cálculo do hash e produzir um char inteiro de 128 bits de longo tempo [] = novo char [16 * 2]; // Se cada byte for representado em hexadecimal, use dois caracteres Int; Cada byte em caracteres hexadecimais byte byte0 = criptyptstr [i]; // pegue o i-th byte str [k ++] = hexdigits [byte0 >>> 4 & 0xf]; // Faça a conversão numérica dos 4 bits no byte, >>> para a mudança lógica, a troca lógica, o símbolo Bits Right Lobse [ 0xf]; // Faça a conversão numérica dos 4 bits inferiores no byte} retorna new String (str); // converte o resultado após a conversão em uma string} catch (nosuchalgorithMexception e) {e.printstacktrace ();} retornar null;}/** @param string que precisa ser * @return */public static string gethash2 (fonte de string, string hashtype) {stringbuilder sb = new stringbuilder (); Messagedigest md5; try {md5 = MessAgedigest.getInstance (hashtype); md5. {sb.append (string.format ("%02x", b)); // decimal a hexadecimal, x significa saída em hexadecimal, 02 indica que existem menos de dois dígitos antes da saída 0} retornar sb.tostring ();} (OSuChalGorithMexception) {); @param source string that needs to be encrypted* @param hashType Encryption type (MD5 and SHA) * @return */public static String getHash3(String source, String hashType) {// Characters used to convert bytes into hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; stringbuilder sb = new stringbuilder (); MessAgedigest md5; try {md5 = MessAgedIgest.getInstance (hashType); md5.UpDSTRATETETETES (); (int i = 0; i <EncryptStr.Length; i ++) {int iRet = EncryptStr [i]; if (IRET <0) {iret += 256;} int id1 = iret / 16; int id2 = iRet % 16; sb.append (hexdigits [íd1] +"" +xgits [IDS1; (NosuchalgorithMexception e) {e.printStackTrace ();} retorna null;} public static void main (string [] args) {system.out.println (gethash ("xiaokui", "md5"); "/n") ;system.out.println(gethash2("xiaokui", "md5")); system.out.println (gethash2 ("xiaokui", "sha") + "/n"); "Md5")); System.out.println (Gethash3 ("Xiaokui", "Sha") + "/n");}}Resultado de saída
8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB7138 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712F44AAB713898745F91 8E830882F03B2CB84D1A657F346DD41A 0BA5512371D00C86E91712
Descobrimos que os três métodos tiveram o mesmo efeito e o comprimento do SHA é de 8 caracteres (32 bits) mais que o MD5.
Resumir
O exposto acima é o conteúdo inteiro deste artigo sobre o exemplo de código da classe de criptografia Messagedigest que vem com Java. Espero que seja útil para todos. Se houver alguma falha, deixe uma mensagem para apontá -la.