BouncyCastle 固有の実装を一般的な実装に変換しようとしていますが、まだ基本に苦労しているため、実行するのは困難です。
これは、機能する以前の BC コードです。
public int decrypt(SecurityToken token, byte[] dataToDecrypt, int inputOffset,
int inputLength, byte[] output, int outputOffset) {
// Make new RijndaelEngine
RijndaelEngine engine = new RijndaelEngine(128);
// Make CBC blockcipher
BufferedBlockCipher bbc = new BufferedBlockCipher(
new CBCBlockCipher(engine));
// find right decryption key and right initialization vector
KeyParameter secret = new KeyParameter(
token.getRemoteEncryptingKey());
byte[] iv = token.getRemoteInitializationVector();
// initialize cipher for decryption purposes
bbc.init(false, new ParametersWithIV(secret, iv));
decryptedBytes = bbc.processBytes(dataToDecrypt, inputOffset,
inputLength, output, outputOffset);
decryptedBytes += bbc.doFinal(output, outputOffset+decryptedBytes);
return decryptedBytes;
}
これはこれまでの私の謙虚な試みです:
SecretKeySpec spec = new SecretKeySpec(
token.getRemoteEncryptingKey(),
"AES");
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, spec, new IvParameterSpec(token.getRemoteInitializationVector()));
decryptedBytes = cipher.update(dataToDecrypt, inputOffset,
inputLength, output, outputOffset);
decryptedBytes += cipher.doFinal(output, outputOffset+decryptedBytes);
return decryptedBytes;
を与える
javax.crypto.BadPaddingException: Given final block not properly padded
関数への入力は次のとおりです。
decrypt: dataToDecrypt.length=1088 inputOffset=0 inputLength=1088 output.length=16384 outputOffset=1180
decrypt: token.getRemoteEncryptingKey()=lBjgFjfR3IilCyT5AqRnXQ==
decrypt: token.getRemoteInitializationVector()=0JFEdkuW6pMo0cwfKdZa3w==
私は何が欠けていますか?
E: 入力データ