Este artigo descreve a análise da implementação de Java do algoritmo de criptografia e descriptografia DES. Compartilhe -o para sua referência, como segue:
Introdução:
O algoritmo de criptografia de dados (DEA) é um algoritmo de criptografia simétrica que provavelmente será o sistema de chaves mais amplamente utilizado, especialmente na proteção da segurança dos dados financeiros. A DEA inicialmente desenvolvida foi incorporada em hardware. Geralmente, as máquinas de caixas automáticas (caixas eletrônicos) usam DEA. Ele vem do trabalho de pesquisa da IBM, que também tinha direitos de patente por vários anos, mas depois de expirado em 1983, está em escopo público e permite que ele seja usado sob certas condições sem a taxa de uso de patentes. Foi oficialmente adotado pelo governo dos EUA em 1977.
O surgimento de decifres práticos de DES depois de 1998 declarou completamente que o algoritmo des não é mais seguro. Em 1999, o NIST emitiu um novo padrão, estipulando que o algoritmo des SOS pode ser usado apenas em sistemas de criptografia herdado, mas não restringe o uso do algoritmo Desede. O algoritmo DES de hoje está lançando o estágio da história, e o algoritmo AES é chamado de substituição.
Princípio de criptografia:
O DES usa uma chave de 56 bits com um bit de paridade adicional de 8 bits para gerar um tamanho máximo de pacote de 64 bits. Esta é uma senha de bloco iterativa usando uma técnica chamada Feistel, onde blocos de texto criptografados são divididos em dois. Use uma subchave para aplicar a função de loop à metade e, em seguida, execute uma operação "exclusiva ou" com a outra metade; Em seguida, troque essas duas metades e o processo continuará, mas o último loop não será trocado. O DES usa 16 ciclos, quatro operações básicas: exclusivas ou, permutação, substituição e operações de turno.
Apoio ao JDK para o Algoritmo de Des
Comprimento da chave: 56 bits
Modo de trabalho: BCE/CBC/PCBC/CTR/CTS/CFB/CFB8 para CFB128/OFB/OBF8 para OFB128
Método de enchimento: nopadding/pkcs5padding/iso10126padding/
Criptografia e descriptografia Java Algoritmo de criptografia simétrica Desede
Deede é o algoritmo de criptografia triplo des, também conhecido como 3DEs ou Triple Des. Use três (ou duas) teclas diferentes para criptografar o bloco de dados três vezes (ou duas) de DES (criptografar uma vez é mais rápido do que fazer criptografia comum três vezes). A força do triplo DES é aproximadamente a mesma que a força-chave dos 112 bits. A segurança é aprimorada através do número de iterações, mas também causa o problema da baixa eficiência da criptografia. Devido à eficiência do algoritmo Desede, nasceu o algoritmo AES.
Até agora, ninguém deu uma maneira eficaz de atacar o triplo des. Se você procurar as chaves em seu espaço chave, então, como o espaço é muito grande, isso não é realmente viável. Se o método de ataque diferencial for usado, a complexidade aumenta exponencialmente em comparação com um único DES.
Existem quatro modelos de Triple des
Código de criptografia Java para o algoritmo DES
pacote com.favccxx.codelib; import java.security.securerandom; importar javax.crypto.cipher; importar javax.crypto.secretKey; import javax.crypto.secretkeyfactory; import javax.crypto.pec.deskeyspec; public estático byte [] Encrypt (byte [] src, byte [] key) lança exceção {// des algoritmo requer uma fonte de número aleatório confiável Securerendom Sr = new SecureRandom (); // Crie um objeto Deskeyspec com os principais dados originais deskeyspec dks = new Deskeyspec (chave); // Crie uma fábrica importante e use -a para converter o deskeyspec em um objeto secretKey secretKeyFactory keyFactory = secretKeyFactory.getInstance (DES); SecretKey SecureKey = keyFactory.GenerateSecret (DKS); // O objeto cifra realmente completa a operação de criptografia cifra cifra = cipher.getInstance (DES); // Inicialize o objeto cifra cifra.init (cipher.encrypt_mode, SecureKey, sr); // execução formal da operação de criptografia retorna cifra.Dofinal (SRC); } / **** @param senha senha* @param key Cryption string* @return* / public final static string Encrypt (senha da string, chave de string) {tente {return byte2String (Encrypt (senha.getBytes (), key.getBytes ())); } catch (Exceção e) {} retornar null; } public static string byte2string (byte [] b) {string hs = ""; String stmp = ""; for (int n = 0; n <b.length; n ++) {sTmp = (java.lang.integer.tohexstring (b [n] & 0xff)); if (stmp.length () == 1) hs = hs + "0" + stmp; else hs = hs + stmp; } retornar hs.ToupperCase (); } public static void main (string [] args) {string EncryptString = Encrypt ("é Zhang Sanfeng", "Teste o chinês e o inglês misto @123654 {"); System.out.println (EncryptString); } // saída: B00542E93695F4CFCE34FC4393C2F4BF} Implementação de Java do Algoritmo de Decripção de Des Decripção
pacote com.favccxx.codelib; importar java.security.securerAndom; importar javax.crypto.cipher; importar javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.cryptoproptox.deskeyspec; / ** * * * @param src Data Source * @param key, o comprimento deve ser múltiplo de 8 * @return * @throws exceção */ public static byte [] descriptografar (byte [] src, byte [] key) lança a exceção {// o des algoritmo de confiança) // Crie um objeto Deskeyspec com os principais dados originais deskeyspec dks = new Deskeyspec (chave); // Crie uma fábrica importante e, em seguida, use -a para converter o objeto Deskeyspec em um objeto SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = keyFactory.GenerateSecret (DKS); // O objeto cifra realmente completa a operação de descriptografia cifra cifra = cipher.getInstance (DES); // Inicialize o objeto cifra cifra.init (cipher.decrypt_mode, SecureKey, sr); // execução formal da operação de descriptografia retorna cifra.Dofinal (SRC); } public final Static String Decrypt (String Data, String Key) {Try {Return String new String (Decrypt (String2Byte (Data.getBytes ()), key.getBytes ())); } catch (Exceção e) {e.printStackTrace (); } retornar nulo; } public static byte [] string2byte (byte [] b) {if ((b.Length % 2)! = 0) lançar novo ilegalArgumentException ("o comprimento nem é"); byte [] b2 = novo byte [B.Length / 2]; for (int n = 0; n <B.Length; n += 2) {string item = new String (b, n, 2); B2 [n / 2] = (byte) Integer.parseint (item, 16); } retornar B2; } public static void main (string [] args) {string DESENCRYPTSTRING = Decrypt ("B00542E93695F4CFCE34FC4393C2F4BF", "Teste o misto chinês e inglês @123654"); System.out.println (DESENCRYPTSTRING); } // Saída: é Zhang Sanfeng}Espero que este artigo seja útil para você. Isso é tudo para você introduzir o conteúdo de análise da implementação Java do algoritmo de criptografia e descriptografia DES. Espero que todos continuem a seguir nosso site! Se você quiser aprender Java, pode continuar a seguir este site.