Java中RSA结合对称密钥加解密文件时出现BadPaddingException问题
BadPaddingException: Decryption error 问题排查与解决
核心问题:RSA密钥对不匹配
你的代码中两次调用generateKeyPair()生成RSA密钥,这会创建两组完全独立的密钥对:用第二组的公钥加密AES密钥,却用第一组的私钥去解密,自然无法得到正确的AES密钥。后续用错误的AES密钥解密文件,就会抛出BadPaddingException。
错误代码片段:
// 错误:生成了两个独立的密钥对 PrivateKey privateKey = generateKeyPair().getPrivate(); PublicKey publicKey = generateKeyPair().getPublic();
解决方法
只生成一次RSA密钥对,从中分别提取公钥和私钥:
// 正确:生成一组密钥对,复用公钥和私钥 KeyPair keyPair = generateKeyPair(); PrivateKey privateKey = keyPair.getPrivate(); PublicKey publicKey = keyPair.getPublic();
额外注意事项
- 实际项目中,加密后的IV需要和密文一起存储(比如写入文件头部),不能只依赖内存中的变量,否则重启程序后无法解密。
- 解密时避免直接覆盖原文件,建议先写入临时文件验证成功后再替换,防止数据丢失。
内容的提问来源于stack exchange,提问作者darkman106
相关产品推荐
相关产品推荐

