Este artículo describe el análisis de la implementación de Java del algoritmo de cifrado y descifrado de DES. Compártelo para su referencia, como sigue:
Introducción:
El algoritmo de cifrado de datos (DEA) es un algoritmo de cifrado simétrico que probablemente sea el sistema clave más utilizado, especialmente para proteger la seguridad de los datos financieros. La DEA inicialmente desarrollada estaba integrada en hardware. Por lo general, las máquinas de cajera automática (ATM) usan DEA. Proviene del trabajo de investigación de IBM, que también tuvo derechos de patente durante varios años, pero después de que expiró en 1983, está en alcance público y permite que se use bajo ciertas condiciones sin la tarifa de uso de patentes. Fue adoptado oficialmente por el gobierno de los Estados Unidos en 1977.
El surgimiento de los deciphers prácticos después de 1998 declaró completamente que el algoritmo DES ya no es seguro. En 1999, NIST emitió un nuevo estándar, estipulando que el algoritmo DES solo puede usarse en sistemas de cifrado heredados, pero no restringe el uso del algoritmo de desede. El algoritmo DES de hoy está lanzando la etapa de la historia, y el algoritmo AES se llama su reemplazo.
Principio de cifrado:
DES usa una clave de 56 bits con una broca de paridad adicional de 8 bits para generar un tamaño máximo de paquete de 64 bits. Esta es una contraseña de bloque iterativa que utiliza una técnica llamada Feistel, donde los bloques de texto cifrados se dividen en dos. Use una subproceso para aplicar la función de bucle a la mitad, y luego realice una operación "exclusiva o" con la otra mitad; Luego intercambie estas dos mitades, y el proceso continuará, pero el último bucle no se cambiará. DES usa 16 ciclos, cuatro operaciones básicas: exclusivas o permutación, sustitución y operaciones de turno.
Soporte de JDK al algoritmo
Longitud de la llave: 56 bits
Modo de trabajo: ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 a CFB128/OFB/OBF8 a OFB128
Método de llenado: nopadding/pkcs5padding/iso10126padding/
Algoritmo de cifrado simétrico de cifrado de Java y descifrado
Desede es el algoritmo de cifrado Triple DES, también conocido como 3Des o Triple Des. Use tres (o dos) claves diferentes para cifrar el bloque de datos tres veces (o dos) de DES (encriptar una vez es más rápido que hacer un cifrado ordinario tres veces). La fuerza del triple des es aproximadamente la misma que la fuerza clave de los 112 bits. La seguridad se mejora a través del número de iteraciones, pero también causa el problema de la baja eficiencia de cifrado. Debido a la eficiencia del algoritmo de Desede, nació el algoritmo AES.
Hasta ahora, nadie ha dado una forma efectiva de atacar a Triple Des. Si busca las teclas en su espacio clave, entonces debido a que el espacio es demasiado grande, esto en realidad no es factible. Si se utiliza el método de ataque diferencial, la complejidad aumenta exponencialmente en comparación con un solo DES.
Hay cuatro modelos de triple des
Código de cifrado de Java para el algoritmo DES
paquete com.favccxx.codelib; import java.security.secureerAndom; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyFactory; import javax.crypto.spec.deskeyspec; public class CiCryptcodcodcodcodcode Public static byte [] encrypt (byte [] src, byte [] key) lanza la excepción {// des algoritmo requiere una fuente de número aleatorio confiable Secureandom sr = neweRandom (); // Cree un objeto DeskeySPEC a partir de los datos de clave originales deskeyspec dks = new DeskeySPEC (clave); // Cree una fábrica clave y úsela para convertir deskeyyspec en un objeto SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GeneratesECret (DKS); // El objeto cifrado realmente completa la operación de cifrado cifrado cifrado = cipher.getInstance (des); // Inicializar el objeto CIPHER CIPHER.Init (cipher.encrypt_mode, securekey, sr); // Ejecución formal de la operación de cifrado return cifre.dofinal (SRC); } / ***** @param contraseña contraseña* @param clave de cifrado Cadena* @return* / public final static string ciCrypt (string contraseña, tecla de cadena) {try {return byte2string (cifrado (contraseña.getBytes (), key.getBytes ()); } catch (excepción e) {} return null; } public static string byte2string (byte [] b) {string hs = ""; Cadena 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; } return hs.ToUpperCase (); } public static void main (string [] args) {string cifryptString = encrypt ("es zhang sanfeng", "prueba china e inglés mixto @123654 {"); System.out.println (cifrado); } // Salida: B00542E93695F4CFCE34FC4393C2F4BF} Implementación de Java del algoritmo de descifrado de DES
paquete com.favccxx.codelib; import java.security.secureerandom; import javax.crypto.cipher; import javax.crypto.secretkey; import javax.crypto.secretkeyfactory; import javax.crypto.spec.deskeyspec; public class descryptcoder "Des"; / ** * * * @param SRC Fuente de datos * @param clave, la longitud debe ser múltiplos de 8 * @return * @throws excepción */ public static byte [] decrypt (byte [] src, byte [] key) Excepción {// El algorithm requiere una fuente de número aleatorio de confianza Secureandom sr = new Surerandom (); // Cree un objeto DeskeySPEC a partir de los datos de clave originales deskeyspec dks = new DeskeySPEC (clave); // Cree una fábrica clave y luego úsela para convertir el objeto DeskeySPEC en un objeto SecretKey SecretKeyFactory KeyFactory = SecretKeyFactory.getInstance (DES); SecretKey SecureKey = KeyFactory.GeneratesECret (DKS); // El objeto cifrado realmente completa la operación de descifrado cifrado cifrado = cipher.getInstance (des); // Inicializar el objeto cifrado cipher.init (cipher.decrypt_mode, securekey, sr); // Ejecución formal de la operación de descifrado return cifre.dofinal (SRC); } public final static string decrypt (string data, key string) {try {return new String (Decrypt (String2Byte (data.getBytes ()), key.getBytes ())); } catch (Exception e) {E.PrintStackTrace (); } return null; } public static byte [] string2byte (byte [] b) {if ((b.length % 2)! = 0) tirar nueva ilegalargumentException ("la longitud ni siquiera"); byte [] b2 = nuevo 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); } return b2; } public static void main (String [] args) {String desencryptString = Decrypt ("B00542E93695F4CFCE34FC4393C2F4BF", "Probar chino e inglés mezclado @123654"); System.out.println (desencryptString); } // Salida: es Zhang Sanfeng}Espero que este artículo te sea útil. Todo esto es para usted introducir el contenido de análisis de la implementación de Java del algoritmo de cifrado y descifrado de DES. ¡Espero que todos continúen siguiendo nuestro sitio web! Si desea aprender Java, puede continuar siguiendo este sitio web.