JAVA AES加密填充

时间:2013-09-20 12:34:25

标签: java aes padding

我正在使用以下代码来加密程序中的某些数据:

cipher = Cipher.getInstance("AES/CBC/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(rawCipherKey, "AES"), new IvParameterSpec(rawCipherIV));

然后用另一种方法:

try {
   cipher.doFinal(buffer, 0, len, encryptedBuffer, 12);
} catch (Exception e) {
   throw new RuntimeException(e);
}

doFinal抛出异常:

java.lang.RuntimeException: javax.crypto.IllegalBlockSizeException: data not block size aligned

但这是 NOT 问题,我理解其原因。

我已收到以下加密数据的说明:

  

加密数据,但只完成16字节块   休息保持未加密

谁可以告诉我是否有另一种方式,例如。对于

Cipher.getInstance("AES/CBC/DO_PADDING_BUT_ONLY_16_BYTES_AND_LEAVE_REST_UNENCRYPTED");

或我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

没有填充方案可以支持你想要的东西。

相反,请在加密前剖析数据。在附加剩余的明文之前,先获取尽可能多的数据块并对其进行加密。