Este artigo apresenta principalmente os algoritmos de criptografia comumente usados para implementação de Java - algoritmos de criptografia unidirecional MD5 e SHA, como segue:
1. Arquitetura de segurança de Java
1.1 Introdução à arquitetura de segurança de Java
Forneça classes e interfaces para estruturas de segurança em Java. A API de segurança JDK é a API principal da linguagem de programação Java, localizada no pacote Java.Security (e suas subpackagens), bem como o pacote Sun.Securityapi (e suas subpackagens). Projetado para ajudar os desenvolvedores a usar recursos de segurança de baixo nível e avançado em seus programas.
A primeira versão do JDK no JDK 1.1 apresentou a "Java Criptografia Arquitetura" (JCA), que se refere à arquitetura usada para acessar e desenvolver funções de senha da plataforma Java. No JDK 1.1, a JCA inclui uma API para assinaturas digitais e digestões de mensagens. O JDK 1.2 estende muito a arquitetura de criptografia Java, também atualiza a infraestrutura de gerenciamento de certificados para oferecer suporte a certificados X.509 V3 e introduz uma nova arquitetura de segurança Java para controle de acesso de granulação fina, configurável, flexível e extensível.
A arquitetura de criptografia Java inclui as partes relacionadas a senha da API de segurança JDK 1.2, bem como um conjunto de convenções e especificações fornecidas neste documento. Para implementar senhas múltiplas e interoperáveis, ele também fornece uma arquitetura de "provedor".
Java Password Extension (JCE)) estende a API JCA, incluindo APIs para criptografia, troca de chaves e códigos de autenticação de informação (MAC). As senhas JCE e JDK juntas fornecem uma API de senha completa que não está relacionada à plataforma. O JCE como uma extensão do JDK será lançado independentemente para cumprir as restrições de controle de exportação dos EUA.
1.2 Código fonte relacionada do JDK no eclipse
Para ter uma compreensão mais profunda da implementação dos algoritmos de criptografia unidirecional MD5 e SHA em Java, o código-fonte do JDK pode estar associado ao uso do Eclipse IDE (o autor usa JDK6.0).
Após a instalação do JDK6.0, existe o diretório src.zip no diretório raiz do JDK (por exemplo, c: /java/jdk1.6.0_21). Este diretório pode ser descomprimido para outro diretório (por exemplo, d:/amigo/estudo/ensaio técnico/201405). src.zip não contém todo o código -fonte do JDK. Por exemplo, as subpackagens do Sun não existem no src.zip (por exemplo, o pacote Sun.security e suas subpackagens usadas neste artigo não estão incluídas).
Para baixar essas subpackagens, você precisa baixar o código -fonte do OpenJDK. OpenJDK é a versão de código aberto do JDK e é lançado na forma do protocolo GPL. No JDK7, o OpenJDK havia se tornado o desenvolvimento da espinha dorsal do JDK7. Sun JDK7 foi lançado com base no OpenJDK7. A maioria de seus códigos originais é igual e apenas uma pequena parte dos códigos originais foi substituída. Publicado usando o JRL (Javaresearch License, Java Research License Contrato).
OpenJdk Download Endereço: //www.vevb.com/softs/75724.html
Após o download, copie todos os arquivos e pastas no OpenJDK-6-SRC-B27-26_OCT_2012/jdk/src/share/classes diretório para o diretório SRC não zombado.
Em seguida, configure o código-fonte associado no Eclipse: clique em "Windows"-> "Preferências" e selecione "Java"-> "Jres instalado" no menu esquerdo. Se o JRE desta máquina foi configurado, você não precisará configurá -la. Se não estiver configurado, clique no botão "Adicionar" à direita e selecione o caminho do JDK6.0 instalado na janela pop-up "Add JRE" (por exemplo, c: /java/jdk1.6.0_21). Clique no botão "OK" para concluir as configurações do JRE.
Selecione o conjunto JRE, clique no botão "Editar ..." à direita, selecione o pacote RT.Jar na janela pop-up, clique no botão "Anexo de origem ...", clique no botão "Pasta externa ..." na janela pop-up e aponte o caminho do código-fonte para o caminho do caminho do SRC agora (por exemplo. Veja a figura abaixo:
Depois de clicar no botão "OK" para configurá-lo, ao escrever a implementação do MD5 e SHA, ao chamar os métodos relevantes do Messagedigest, você pode usar o modo de depuração F5 depuração única para visualizar as classes principalmente envolvidas na implementação de algoritmos de criptografia de MD5 e SHA unidirecional em Java.
1.3 As principais classes de Criptografia MD5 e SHA em JDK
Em JDK6.0, os diagramas de classe de várias classes intimamente relacionados ao MD5 e SHA são os seguintes:
Entre eles, "Messagedigestspi" é a classe abstrata de nível superior, e "Messagedigest" e "DigestBase", no mesmo pacote, são classes sub-abstrates.
No diagrama de classes acima, o padrão de design do delegado é usado. O princípio desse padrão é que a classe B (aqui está a delegagem interna da classe) e a classe A (aqui está a classe Messagedigestspi) são duas classes que não têm relacionamento entre si. B tem exatamente os mesmos métodos e atributos que A; E os métodos e atributos de chamada em B é chamar métodos e atributos com o mesmo nome em A. b parece ser um intermediário autorizado por A. O código de terceiros não precisa conhecer a existência de A e suas subclasses, nem precisa ter uma conexão direta com A e suas subclasses. Através de B, as funções de A podem ser usadas diretamente, que podem não apenas usar várias funções de A, mas também proteger A e suas subclasses bem.
Os códigos relevantes para MD5 e SHA são todos em aulas como MD5 e SHA, mas a classe abstrata Messagedigest voltada para o cliente não precisa lidar com várias classes de implementação, apenas lide com eles através da classe Delegate.
2. Criptografia MD5
2.1 Visão geral
Algoritmo de digestão de mensagens MD5 (o nome chinês é o algoritmo de digestão de mensagens quinta edição) é uma função de hash amplamente usada no campo da segurança do computador para fornecer proteção de integridade de mensagens. O número de arquivo desse algoritmo é o RFC 1321 (R.Rivest, MIT Laboratory for Computer Science e RSA Data Security Inc. abril de 1992).
O nome completo do MD5 é o algoritmo de digestão da mensagem 5 (algoritmo de informação-abstração), desenvolvido por Ronald L. Rivest, do MIT Laboratory for Computer Science e RSA Data Security Inc no início dos anos 90 e desenvolvido por MD2, MD3 e MD4.
O MD5 é usado para garantir a transmissão de informações completa e consistente. É um dos algoritmos de hash amplamente utilizados por computadores (também traduzidos como algoritmo abstrato e algoritmo de hash). As linguagens de programação convencionais são geralmente implementadas pelo MD5. Cálculo de dados (como caracteres chineses) em outro valor de comprimento fixo é o princípio básico do algoritmo de hash. Os antecessores do MD5 foram MD2, MD3 e MD4.
A função do MD5 é permitir que informações de grande capacidade sejam "compactadas" em um formato confidencial antes de assinar uma chave privada com software de assinatura digital (ou seja, converter uma sequência de bytes de qualquer comprimento em uma sequência hexadecimal de um certo comprimento).
2.2 Princípios do algoritmo
Uma breve descrição do algoritmo MD5 pode ser a seguinte: o MD5 processa as informações de entrada em pacotes de 512 bits e cada pacote é dividido em 16 sub-pacotes de 32 bits. Após uma série de processamento, a saída do algoritmo consiste em quatro pacotes de 32 bits. Após cascata esses quatro pacotes de 32 bits, um valor de hash de 128 bits será gerado.
No algoritmo MD5, as informações precisam ser preenchidas primeiro, para que o resultado do saldo restante do seu par de bits 512 seja igual a 448. Portanto, o comprimento do bit da informação será estendido para N*512+448, n é um número inteiro não negativo e N pode ser zero. O método de enchimento é o seguinte: preencha um 1 e inúmeros 0s por trás das informações e pare de preencher as informações com 0 até que as condições acima sejam atendidas. Em seguida, um comprimento de informação de preenchimento superior é anexado em binário de 64 bits. Após essas duas etapas de processamento, o comprimento do bit das informações = n*512+448+64 = (n+1)*512, ou seja, o comprimento é exatamente um múltiplo inteiro de 512. O motivo disso é atender aos requisitos para o comprimento da informação no processamento subsequente.
2.3 Implementação de MD5 em Java
A implementação Java do algoritmo de criptografia MD5 é o seguinte:
pacote amigo.endecrypt; importar java.security.messagedigest;/*** Use a criptografia md5* @author xingxing, xie* @dateTime 2014-5-31*/public classe md5util {/**** md5 para gerar 32-bit md5pt md5util {/**** md5 stringtion gera 32-bit md5 cod* Código*/ public Static String md5Encode (String Instr) lança exceção {Messagedigest md5 = null; tente {md5 = Messagedigest.getInstance ("md5"); } catch (Exceção e) {System.out.println (e.toString ()); E.PrintStackTrace (); retornar ""; } byte [] bytearray = Instr.getBytes ("UTF-8"); byte [] md5bytes = md5.digest (bytearray); StringBuffer hexvalue = new StringBuffer (); para (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) e 0xff; if (val <16) {hexvalue.append ("0"); } hexvalue.append (Integer.tohexstring (VAL)); } return hexvalue.toString (); } / ** * Teste a função principal * @param args * @throws exceção * / public static void main (string args []) lança exceção {string str = new string ("amigoxiexiexingxing"); System.out.println ("original:" + str); System.out.println ("md5:" + md5Encode (str)); }}Resultados do teste:
Original: Amigoxiexiexingxing
Post-MD5: E9AC094091B96B84CCA48098BC21B1D6
3. Criptografia sha
3.1 Visão geral
SHA é um algoritmo de criptografia de dados. Esse algoritmo foi desenvolvido e melhorado por especialistas em criptografia ao longo dos anos e se tornou cada vez mais perfeito. Agora, tornou -se um dos algoritmos mais seguros de hash reconhecidos e tem sido amplamente utilizado. A idéia desse algoritmo é receber um texto simples e convertê -lo em um texto cifrado (geralmente menor) de uma maneira irreversível. Também pode ser simplesmente entendido como o processo de pegar uma sequência de códigos de entrada (chamados de premapiação ou informação) e convertê-los em uma sequência de saída de dígito fixo mais curto, ou seja, valores de hash (também conhecidos como código de autenticação de resumo ou informação). Pode -se dizer que o valor da função de hash é uma espécie de "impressão digital" ou "resumo" do texto simples, portanto a assinatura digital do valor do hash pode ser considerada como a assinatura digital do texto simples.
O algoritmo Secure Hash (SHA) é o National Standard Fips Pub 180, lançado pelo Instituto Nacional de Padrões e Tecnologia. O padrão mais recente foi atualizado para o FIPS PUB 180-3 em 2008. Entre eles, vários algoritmos unidirecionais de hash, como SHA-1, SHA-224, SHA-256, SHA-384 e SHA-512. SHA-1, SHA-224 e SHA-256 são adequados para mensagens com um comprimento superior a 2^64 bits binários. SHA-384 e SHA-512 são adequados para mensagens com um comprimento superior a 2^128 bits binários.
3.2 Princípio
SHA-1 é um algoritmo de criptografia de dados. A idéia desse algoritmo é receber um texto simples e convertê -lo em um texto cifrado (geralmente menor) de uma maneira irreversível. Também pode ser simplesmente entendido como o processo de pegar uma sequência de códigos de entrada (chamados de premapiação ou informação) e convertê-los em uma sequência de saída de dígito fixo mais curto, ou seja, valores de hash (também conhecidos como código de autenticação de resumo ou informação).
A segurança de uma função de hash unidirecional reside na forte natureza unidirecional de seu processo de operação de gerar valores de hash. Se uma senha estiver incorporada na sequência de entrada, ninguém poderá gerar o valor do hash correto sem conhecer a senha, garantindo assim sua segurança. O SHA bloqueia os fluxos de entrada em 512 bits (64 bytes) por bloco e produz 20 bytes de saída chamado código de autenticação de informação ou resumo da informação.
O comprimento dos pacotes de entrada deste algoritmo é ilimitado e a saída gerada é um resumo de mensagens de 160 bits. A entrada é processada em pacotes de 512 bits. O SHA-1 é irreversível, à prova de conflitos e tem um bom efeito de avalanche.
A assinatura digital pode ser implementada através de um algoritmo de hash. O princípio da assinatura digital é converter o texto simples a ser transmitido em um resumo da mensagem por meio de uma operação de função (hash) (diferentes textos simples correspondem a diferentes digestões de mensagens). O resumo da mensagem é criptografado e enviado ao destinatário junto com o texto simples. O destinatário gera uma nova mensagem digestora para descriptografar e compara o resumo da mensagem do remetente. O resultado da comparação é consistente, o que significa que o texto simples não foi alterado. Se for inconsistente, significa que o texto simples foi adulterado.
Mac (Código de autenticação da informação) é um resultado de hash, no qual parte das informações de entrada é uma senha. Somente os participantes que sabem que essa senha podem calcular e verificar a legitimidade do código MAC novamente.
3.3 Implementação de SHA em Java
A implementação Java do SHA é semelhante ao MD5, e o código de referência é o seguinte:
pacote amigo.endecrypt; importar java.security.messagedigest;/*** use a criptografia shaa* @author xingxing, xie* @datetime 2014-6-1*/public shautil {/**** sha criptografia gera 40 bits sha-bit* @param string para serem strings para serem strings para serem embripated* Shaencode (String Instr) lança exceção {Messagedigest sha = null; tente {sha = Messagedigest.getInstance ("sha"); } catch (Exceção e) {System.out.println (e.toString ()); E.PrintStackTrace (); retornar ""; } byte [] bytearray = Instr.getBytes ("UTF-8"); byte [] md5bytes = sha.digest (bytearray); StringBuffer hexvalue = new StringBuffer (); para (int i = 0; i <md5bytes.length; i ++) {int val = ((int) md5bytes [i]) e 0xff; if (val <16) {hexvalue.append ("0"); } hexvalue.append (Integer.tohexstring (VAL)); } return hexvalue.toString (); } / ** * Teste a função principal * @param args * @throws exceção * / public static void main (string args []) lança exceção {string str = new string ("amigoxiexiexingxing"); System.out.println ("original:" + str); System.out.println ("sha:" + shaencode (str)); }}Os resultados dos testes são os seguintes:
Original: Amigoxiexiexingxing
Após o SHA: 04F79F496DD6BDAB3439511606528A4AD9CAAC5E
3. Comparação entre SHA-1 e MD5
Porque ambos são derivados do MD4, SHA-1 e MD5 são muito semelhantes um ao outro. Da mesma forma, sua força e outras características são semelhantes, mas também existem diferenças nos seguintes pontos:
1) Segurança contra ataques forçados: a diferença mais significativa e importante é que o SHA-1 Digest é de 32 bits mais longo que o MD5 Digest. Usando a tecnologia forçada, a dificuldade de gerar qualquer mensagem para que seu resumo seja igual a um determinado digestão é uma operação da ordem de 2^128 para MD5 e uma operação de 2^160 para SHA-1. Dessa forma, o SHA-1 tem maior força para ataques à força.
2) Segurança da análise de senha: devido ao design do MD5, é vulnerável à análise de senha e o SHA-1 parece ser menos suscetível a esses ataques.
3) Velocidade: no mesmo hardware, o SHA-1 funciona lentamente que o MD5.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.