public static String encrypt(String strToEncrypt) {
SecureRandom secureRandom = new SecureRandom();
byte[] key = new byte[16];
secureRandom.nextBytes(key);
if (strToEncrypt != null) {
try {
IvParameterSpec ivspec = new IvParameterSpec(key);
SecretKeySpec keySpec = new SecretKeySpec(Constants.secretKey.getBytes(Constants.UTF_8), Constants.AES);
Cipher cipher = Cipher.getInstance(Constants.AES_CBC_PKCS5PADDING);
cipher.init(Cipher.ENCRYPT_MODE, keySpec, ivspec);
return Base64.getEncoder().encodeToString(cipher.doFinal(strToEncrypt.getBytes("UTF-8")));
} catch (Exception ex) {
LOGGER.error(CommonUtil.exceptionErrorPrefixSuffix("Encryption Exception in DoEncryption::encrypt", ex));
}
}
return null;
}
public static String decrypt(String id) throws UnsupportedEncodingException {
String decryptedId = null;
SecureRandom secureRandom = new SecureRandom();
byte[] key = new byte[16];
secureRandom.nextBytes(key);
SecretKeySpec keySpec = new SecretKeySpec(Constants.secretKey.getBytes(Constants.UTF_8),Constants.AES);
byte[] decodedCiphertext = Base64.getDecoder().decode(id);
try {
IvParameterSpec ivspec = new IvParameterSpec(key);
Cipher cipher = Cipher.getInstance(Constants.AES_CBC_PKCS5PADDING);
cipher.init(Cipher.DECRYPT_MODE, keySpec , ivspec);
byte[] original = cipher.doFinal(decodedCiphertext);
decryptedId = new String(original);
return decryptedId;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
Encryption works fine. but while decryption it throws an exception.
javax.crypto.BadPaddingException: Given final block not properly padded. Such issues can arise if a bad key is used during decryption. at cipher.doFinal(decodedCiphertext);
Thanks in advance.