Cómo generar una clave secreta en Java una vez y usar esa clave en 2 programas diferentes
Mi objetivo es escribir un programa Java para cifrar un archivo de texto (cipher text
) utilizandoAES algorithm
. Y luego, escribe otro programa para descifrar ese archivo encriptado (cipher text
) para recuperar el texto plano. Quiero usar la misma clave (la misma clave, generar una vez, guardarla en algún lugar y usarla tanto en el programa de cifrado como en el de descifrado) para el proceso de cifrado y descifrado. Si genero la clave y hago el cifrado y descifrado línea por línea en el mismo programa, entonces funciona perfectamente. Aquí está el fragmento de código de trabajo para eso:
String strDataToEncrypt = new String();
String strCipherText = new String();
String strDecryptedText = new String();
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
Cipher aesCipher = Cipher.getInstance("AES");
aesCipher.init(Cipher.ENCRYPT_MODE,secretKey);
strDataToEncrypt = "any text input";
byte[] byteDataToEncrypt = strDataToEncrypt.getBytes();
byte[] byteCipherText = aesCipher.doFinal(byteDataToEncrypt);
strCipherText = new BASE64Encoder().encode(byteCipherText);
System.out.println("cipher text: " +strCipherText);
aesCipher.init(Cipher.DECRYPT_MODE,secretKey,aesCipher.getParameters());
byte[] byteDecryptedText = aesCipher.doFinal(new BASE64Decoder().decodeBuffer(strCipherText));
strDecryptedText = new String(byteDecryptedText);
System.out.println("plain text again: " +strDecryptedText);
Pero, necesito tener dos programas diferentes (archivos java) para el cifrado y descifrado. Entonces, tengo que generar de alguna manera una clave y guardarla en algún lugar. Luego use la misma clave para el programa de cifrado y descifrado. ¿Cómo puedo hacer eso?
EDIT_1
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
byte[] encoded = secretKey.getEncoded();
System.out.println("key: "+encoded);// key: [B@52b2a2d8
Puedo obtener el valor de la clave codificada utilizando el programa anterior. ¿Pero mi pregunta es cómo generar el SecretKey usando este valor en mi programa de descifrado?