一位古老的PHP人为Rijndael-256 (!AES256) / ECB / NoPadding
编写了加密代码。
我试过了。
PaddedBufferedBlockCipher cipher = new PaddedBufferedBlockCipher(
new RijndaelEngine(256), new ZeroBytePadding());
cipher.init(encrypt, new KeyParameter(Arrays.copyOf(KEY.getBytes(UTF_8), 16)));
byte[] source = supplier.get();
byte[] target = new byte[cipher.getOutputSize(source.length)];
int offset = cipher.processBytes(source, 0, source.length, target, 0);
cipher.doFinal(target, offset);
但加密总是添加填充。是的我知道我使用了ZeroBytePadding
。
我该如何解决这个问题?我找不到任何好的参考资料。
答案 0 :(得分:2)
如果加密确实没有添加填充,那么只需将密码初始化为:
new BufferedBlockCipher(new RijndaelEngine(256))
请注意,如果您尝试解密的数据实际上并非块对齐,则doFinal
调用将抛出DataLengthException
。
doFinal
的返回值(输出了多少字节)也是一个好习惯,因为getOutputSize
被允许高估。