javax.crypto.BadPaddingException:给定的最后一个块没有正确填充-完整示例

javax.crypto.BadPaddingException:给定的最后一个块没有正确填充-完整示例,java,encryption,Java,Encryption,[编辑:]已解决!看 [原件:] 很抱歉再次撞到这匹死马,但我无法让它工作。。。(我提供了一个完整的例子): 代码: 怎么办?您使用的是随机IV,但您没有使用解密方法共享加密过程中生成的随机IV。相反,它使用的是随机IV本身 你有: byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV(); 但之后你似乎什么也不做。谢谢!!现在一切都好了。(为了简单起见,使用空IV。)@StefanReich我当然希望你不会花1年2个

[编辑:]已解决!看

[原件:]

很抱歉再次撞到这匹死马,但我无法让它工作。。。(我提供了一个完整的例子):

代码:


怎么办?

您使用的是随机IV,但您没有使用解密方法共享加密过程中生成的随机IV。相反,它使用的是随机IV本身

你有:

byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();

但之后你似乎什么也不做。

谢谢!!现在一切都好了。(为了简单起见,使用空IV。)@StefanReich我当然希望你不会花1年2个半月的时间让它工作:P注意空IV(或者实际上是零值IV)是不安全的。你也可以考虑GCM认证的模式。哈哈,不,我已经停止工作了。我意识到空IV不是最安全的选择,但我认为它对于我的任何应用程序都足够安全。谢谢:-)
javax.crypto.BadPaddingException: Given final block not properly padded
    at main.decrypt(main.java:98)
    at main.main(main.java:26)
    ... 9 more
Caused by: javax.crypto.BadPaddingException: Given final block not properly padded
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:966)
    at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:824)
    at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:436)
    at javax.crypto.Cipher.doFinal(Cipher.java:2048)
    at main.decrypt(main.java:95)
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();