我正在使用以下代码来加密程序中的某些数据:
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");
或我如何实现这一目标?
答案 0 :(得分:0)
没有填充方案可以支持你想要的东西。
相反,请在加密前剖析数据。在附加剩余的明文之前,先获取尽可能多的数据块并对其进行加密。