0

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

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

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

我有以下加密数据的说明:

加密数据,但仅完成 16 字节块,其余保持未加密

谁能告诉我是否有其他方法,例如。为了

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

或者我怎么能做到这一点?

4

1 回答 1

0

没有填充方案可以支持您想要的内容。

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

于 2013-09-20T12:37:59.180 回答