如何使用BouncyCastle API为Rijndael-256做什么?

时间:2018-05-21 04:20:32

标签: java bouncycastle rijndael

一位古老的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

我该如何解决这个问题?我找不到任何好的参考资料。

1 个答案:

答案 0 :(得分:2)

如果加密确实没有添加填充,那么只需将密码初始化为:

new BufferedBlockCipher(new RijndaelEngine(256))

请注意,如果您尝试解密的数据实际上并非块对齐,则doFinal调用将抛出DataLengthException

顺便说一句,检查doFinal的返回值(输出了多少字节)也是一个好习惯,因为getOutputSize被允许高估。