javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT

本文详细解析了在使用AES和DES加密算法时遇到的BadPaddingException错误,强调了算法一致性、模式填充匹配及密钥相同的必要性,指导如何避免加密过程中的常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做AES、DES 等加密的时候会出现该类问题:

12-10 05:34:21.721  4043   724 W System.err: javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT
12-10 05:34:21.721  4043   724 W System.err: 	at com.android.org.conscrypt.NativeCrypto.EVP_CipherFinal_ex(Native Method)
12-10 05:34:21.721  4043   724 W System.err: 	at com.android.org.conscrypt.OpenSSLCipher$EVP_CIPHER.doFinalInternal(OpenSSLCipher.java:570)
12-10 05:34:21.721  4043   724 W System.err: 	at com.android.org.conscrypt.OpenSSLCipher.engineDoFinal(OpenSSLCipher.java:351)
12-10 05:34:21.721  4043   724 W System.err: 	at javax.crypto.Cipher.doFinal(Cipher.java:1741)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.core.BlockEncryptionHelper.encrypt(BlockEncryptionHelper.java:126)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.aes.AESHelper.encrypt(AESHelper.java:17)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.aes.AESEncryption.encrypt(AESEncryption.java:23)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.core.BlockEncryption.decryptFile(BlockEncryption.java:103)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.FileEncryption.decryptFiles(FileEncryption.java:171)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.FileEncryption.operation(FileEncryption.java:210)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.FileEncryption.-wrap0(Unknown Source:0)
12-10 05:34:21.721  4043   724 W System.err: 	at com.shift.encrytion.FileEncryption$EncryptionTask.doInBackground(FileEncryption.java:223)
12-10 05:34:21.722  4043   724 W System.err: 	at com.shift.encrytion.FileEncryption$EncryptionTask.doInBackground(FileEncryption.java:221)
12-10 05:34:21.722  4043   724 W System.err: 	at android.os.AsyncTask$2.call(AsyncTask.java:333)
12-10 05:34:21.722  4043   724 W System.err: 	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
12-10 05:34:21.722  4043   724 W System.err: 	at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:245)
12-10 05:34:21.722  4043   724 W System.err: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
12-10 05:34:21.722  4043   724 W System.err: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
12-10 05:34:21.722  4043   724 W System.err: 	at java.lang.Thread.run(Thread.java:764)

主要确定下一下几点:

1、算法的名称与加密时是否相同

2、加密和解密时的模式、填充是否相同

3、加密和解密时的密钥是否相同

4、模式、填充是否是该算法支持的

 

根本原因就是code 书写不正确,详细确认!

 

详细看:

数据加密 ---- 总篇

 

 

package com.armatura.biomodule.util; import android.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.nio.charset.StandardCharsets; import java.security.MessageDigest; public class AESUtil { private static final String AES_CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding"; private static final int IV_LENGTH = 16; // AES块大小固定为16字节 /** * AES加密 * @param key 密钥字符串 * @param data 待加密数据 * @return Base64编码的加密结果 */ public static String encrypt(String key, String data) throws Exception { // 生成密钥(自动处理密钥长度) SecretKeySpec secretKey = generateKey(key); // 生成随机IV byte[] iv = new byte[IV_LENGTH]; // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { // SecureRandom.getInstanceStrong().nextBytes(iv); // } else { // new SecureRandom().nextBytes(iv); // } IvParameterSpec ivSpec = new IvParameterSpec(iv); // 初始化加密器 Cipher cipher = Cipher.getInstance(AES_CIPHER_ALGORITHM); cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec); // 加密数据 byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); // 合并IV和密文(IV+密文) // byte[] combined = new byte[iv.length + encrypted.length]; // System.arraycopy(iv, 0, combined, 0, iv.length); // System.arraycopy(encrypted, 0, combined, iv.length, encrypted.length); return Base64.encodeToString(encrypted, Base64.URL_SAFE); } /** * AES解密 * @param key 密钥字符串 * @param encryptedData Base64编码的加密数据 */ public static String decrypt(String key, String encryptedData) throws Exception { // 解码Base64 byte[] combined = Base64.decode(encryptedData, Base64.URL_SAFE); // 分离IV和密文 // byte[] iv = new byte[IV_LENGTH]; // byte[] ciphertext = new byte[combined.length - IV_LENGTH]; // System.arraycopy
03-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

私房菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值