Los códigos de cifrado simétrico y descifrado de AES se introducen en detalle para su referencia. El contenido específico es el siguiente
paquete de demostración. java.util.scanner; import javax.crypto.badpaddingexception; import javax.crypto.cipher; import javax.crypto.illegalblocksizeexception; import javax.crypto.keyGenerator; import javax.crypto.nosuchpaddingexception; import javax.crykey; javax.crrypto.spec.secretkeyspec; import sun.misc.base64Decoder; import sun.misc.base64Encoder;/** AES Cifrado Symetric y Decryption*/Public Class SymMetricEncoder {/** Cifrado* 1. Construya el generador clave* 2. Inicialize el generador de clave según la clase ECNoderules* 3. 4. Cree e inicialice la contraseña * 5. Cifrado de contenido * 6. Devuelve la cadena */public static string aesenCode (cadena coderules, contenido de cadena) {try {// 1. Construya el generador de claves, especificado como el algoritmo AES, y es KeyGenerator Insensible al caso KeyGen = KeyGenerator.GetInstance ("AES"); // 2. Inicialice el generador de claves de acuerdo con la regla de Ecnoderules // genere una fuente aleatoria de 128 bits, y de acuerdo con la matriz de byte pasada KeyGen.init (128, Newerandom (coderules.getBytes ())); // 3. Genere la tecla simétrica original SecretKey original_key = keygen.generateKey (); // 4. Obtenga la matriz de bytes de la clave simétrica original byte [] raw = original_key.getencoded (); // 5. Genere la clave AES desde la tecla SecretKey de Byte Array = New SecretKeySpec (RAW, "AES"); // 6. De acuerdo con el algoritmo especificado AES, cifrado de cifrado de criptores autogenerados = cifrado. // 7. Inicializar el criptor, el primer parámetro es la operación de cifrado (cifrado) o descifrado y descifrado (descrypt_mode), y el segundo parámetro es la clave utilizada cipher.init (cipher.encrypt_mode, key); // 8. Obtenga la matriz de bytes de contenido cifrado (debe establecerse en UTF-8 aquí). De lo contrario, si hay un chino mixto e inglés en el contenido, se descifrará en el código confuso byte [] byte_encode = content.getBytes ("UTF-8"); // 9. De acuerdo con el método de inicialización del cifrado-encriptación: cifre el byte de datos [] byte_aes = cipher.dofinal (byte_encode); // 10. Convierta los datos encriptados en una cadena // El paquete no se encontrará en Base64Encoder aquí // Solución: // Eliminar primero elimina la biblioteca del sistema JRE en la ruta de compilación del proyecto, y luego agrega la biblioteca del sistema de la biblioteca, todo va bien después de la recompilación. String aes_encode = new String (new Base64Encoder (). ENCODE (BYTE_AES)); // 11. Devuelve la cadena para devolver AES_ENCODE; } Catch (nosuchalgorithMexception e) {E.PrintStackTrace (); } Catch (nosuchpaddingException e) {E.PrintStackTrace (); } catch (InvalidKeyException e) {E.PrintStackTrace (); } catch (ilegalBlockSizeException e) {E.PrintStackTrace (); } catch (BadPaddingException e) {E.PrintStackTrace (); } catch (UnsupportedEncodingException e) {E.PrintStackTrace (); } // Si hay algún error, agregue NULL return null; } /** Decrypt* Proceso de descifrado:* 1. Los mismos pasos de cifrado 1-4* 2. Inverso hiló la cadena encriptada en un byte [] Array* 3. Descripto el contenido encriptado* /public static String aesdncode (cadena coderules, contenido de cadena) {try {// 1. Construya el generador de claves, especifíquelo como un algoritmo AES y no es KeyGenerator Sensitive de mayúscula KeyGen = KeyGenerator.GetInstance ("AES"); // 2. Inicialice el generador de claves de acuerdo con la regla de Ecnoderules // genere una fuente aleatoria de 128 bits, y de acuerdo con la matriz de byte pasada KeyGen.init (128, Newerandom (coderules.getBytes ())); // 3. Genere la tecla simétrica original SecretKey original_key = keygen.generateKey (); // 4. Obtenga la matriz de bytes de la clave simétrica original byte [] raw = original_key.getencoded (); // 5. Genere la tecla AES basada en la tecla SecretKey de Byte Array = New SecretKeySPEC (RAW, "AES"); // 6. De acuerdo con el algoritmo especificado AES CIPHER AUTOR FORMING, CIPHER CIPHER = CIPHER.GETINSTANCE ("AES"); // 7. Inicializar el cifrado, el primer parámetro es la operación de cifrado (encrypt_mode) o decrypt (decrypt_mode), y el segundo parámetro es la clave cipher.init (cipher.decrypt_mode, key); // 8. Decodifique el contenido encriptado y codificado en una matriz de byte byte [] byte_content = new Base64Decoder (). DecodeBuffer (contenido); /** Decrypt*/ byte [] byte_decode = cipher.dofinal (byte_content); String aes_decode = new String (byte_decode, "utf-8"); return aes_decode; } Catch (nosuchalgorithMexception e) {E.PrintStackTrace (); } Catch (nosuchpaddingException e) {E.PrintStackTrace (); } catch (InvalidKeyException e) {E.PrintStackTrace (); } catch (ioException e) {E.PrintStackTrace (); } catch (ilegalBlockSizeException e) {E.PrintStackTrace (); } catch (BadPaddingException e) {E.PrintStackTrace (); } // Si hay algún error, agregue NULL return null; } public static void main (string [] args) {SymMetricEncoder SE = new SymMetricEncoder (); Scanner Scanner = New Scanner (System.in); /** Cifrado*/ system.out.println ("use el cifrado simétrico AES, ingrese las reglas de cifrado"); String coderules = scanner.next (); System.out.println ("Ingrese el contenido para estar encriptado:"); String content = scanner.next (); System.out.println ("Según la regla de entrada"+Encodérculas+"El texto cifrado cifrado es:"+se.aesEncode (Encoderules, content)); /** Decrypt*/ System.out.println ("Use el descifrado simétrico AES, ingrese las reglas de cifrado: (debe ser lo mismo que el cifrado)"); coderules = scanner.next (); System.out.println ("Ingrese el contenido para ser descifrado (texto cifrado):"); content = scanner.next (); System.out.println ("según las reglas de entrada"+encodérculas+"El texto sin formato descifrado es:"+se.aesdncode (encoderules, content)); }} Resultados de la prueba:
Use el cifrado simétrico AES, ingrese las reglas de cifrado. Utilice el cifrado simétrico AES. Ingrese el contenido que desea encriptar:
Use el cifrado simétrico AES para cifrar el texto cifrado utilizando el cifrado simétrico AES de acuerdo con las reglas de entrada es: Z0nwrnphgxhn0cqjls58ycjhmcbfer333rws7lw+ay = =
Utilice el descifrado simétrico AES, ingrese las reglas de cifrado: (debe ser lo mismo que el cifrado)
Utilice el cifrado simétrico AES para ingresar el contenido (cifrado):
Z0nwrnphgxhn0cqjls58ycjhmcbfer33rws7lw+ay =
El texto sin formato descifrado utilizando el cifrado simétrico AES de acuerdo con las reglas de entrada es: utilizar el cifrado simétrico AES
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.