У меня проблемы с реализацией шифрования Rijndael с помощью BouncyCastle API для Java.
Я получаю OutputLengthException
при выполнении cipher.doFinal(inputTextBytes, intOutOff);
:
org.bouncycastle.crypto.OutputLengthException: слишком короткий буфер вывода
Я не совсем понимаю, как сгенерировать это целое число для выполнения метода doFinal()
.
Вот что я попробовал:
public class RijndaelAndRFC2899Implementation {
final static String WORD = "763059";
final static String PASSWORD = "515t3ma5m15B4d35";
final static byte[] SALT = new byte[]{1, 2, 3, 4, 5, 6, 7, 8};
final static int KEY_SIZE = 256;
final static int BLOCK_SIZE = 128;
final static int ITERATIONS = 1000;
public static void main(String[] args) throws Exception {
BufferedBlockCipher cipher = getCipher(PASSWORD, true);
byte[] inputText = WORD.getBytes("UTF-8");
byte asd[] = new byte[cipher.getOutputSize(inputText.length)];
int l = cipher.processBytes(inputText, 0, inputText.length, asd, 0);
int n = cipher.doFinal(inputText, l); //<---HERE PRODUCES OutputLengthException
}
private static BufferedBlockCipher getCipher(String password, boolean encrypt) throws Exception {
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(password.getBytes("UTF-8"));
byte[] newPassword = md.digest();
PKCS5S2ParametersGenerator generator = new PKCS5S2ParametersGenerator();
generator.init(newPassword, SALT, ITERATIONS);
ParametersWithIV iv = ((ParametersWithIV) generator.generateDerivedParameters(KEY_SIZE, BLOCK_SIZE));
RijndaelEngine engine = new RijndaelEngine();
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CBCBlockCipher(engine));
cipher.init(encrypt, iv);
return cipher;
}
}
Можете ли вы помочь мне понять, что я делаю неправильно?