使用key和iv的javaaes块解密

使用key和iv的javaaes块解密,java,security,aes,Java,Security,Aes,我正在尝试将特定于BouncyCastle的实现转换为通用的实现,但由于我仍在努力学习基础知识,因此很难做到这一点 这是以前的BC代码: public int decrypt(SecurityToken token, byte[] dataToDecrypt, int inputOffset, int inputLength, byte[] output, int outputOffset) { // Make new RijndaelEngine RijndaelEngi

我正在尝试将特定于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:输入数据

通常
BadPaddingException
表示:

  • 原始明文没有使用您建议的填充算法进行填充。因此,数据加密时可能没有使用PKCS#5

  • 您使用了错误的密钥进行解密。这会导致解密完成后填充看起来不正确

希望您能看看您的环境,并找出其中一个是否可能?查看您的BouncyCastle代码,我会假设您根本没有使用填充。尝试更改:

cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
致:

cipher = Cipher.getInstance("AES/CBC/NoPadding");