la respuesta para 128 bits
El siguiente método es para cifrar una cadena (valueEnc
) con el cifrado AES:
private static final String ALGORITHM = "AES";
public String encrypt(final String valueEnc, final String secKey) {
String encryptedVal = null;
try {
final Key key = generateKeyFromString(secKey);
final Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.ENCRYPT_MODE, key);
final byte[] encValue = c.doFinal(valueEnc.getBytes());
encryptedVal = new BASE64Encoder().encode(encValue);
} catch(Exception ex) {
System.out.println("The Exception is=" + ex);
}
return encryptedVal;
}
El siguiente método descifrará la cadena cifrada AES (encryptedVal
) :
public String decrypt(final String encryptedValue, final String secretKey) {
String decryptedValue = null;
try {
final Key key = generateKeyFromString(secretKey);
final Cipher c = Cipher.getInstance(ALGORITHM);
c.init(Cipher.DECRYPT_MODE, key);
final byte[] decorVal = new BASE64Decoder().decodeBuffer(encryptedValue);
final byte[] decValue = c.doFinal(decorVal);
decryptedValue = new String(decValue);
} catch(Exception ex) {
System.out.println("The Exception is=" + ex);
}
return decryptedValue;
}
El secKey
es una clave de 128 bits, que está codificada en el BASE64Encoder
. El BASE64Decoder
en el siguiente método genera una adecuada clave de 128 bits
private Key generateKeyFromString(final String secKey) throws Exception {
final byte[] keyVal = new BASE64Decoder().decodeBuffer(secKey);
final Key key = new SecretKeySpec(keyVal, ALGORITHM);
return key;
}
Realmente no sé, pero creo que el uso de una clave de 256 bytes hará el trabajo. –
en realidad, solo la clave de 16 bytes (128 bits) está funcionando en mi código. – Bhuban
¿Qué es "no funciona" con teclas más grandes? ¿Recibes una excepción? ¿cúal? ¿Cuál es su mensaje y seguimiento de la pila? –