AES加解密的错误提示 javax.crypto.BadPaddingException: pad block corrupted

AES解密的错误提示:

javax.crypto.BadPaddingException: pad block corrupted
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher$BufferedGenericBlockCipher.doFinal(Unknown Source)
at org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher.engineDoFinal(Unknown Source)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
at com.shangying.toolbox.security.AESUtil.decrypt(AESUtil.groovy:98)

问题描述:AES 可以正常加解密,但是多用户并发操作时,有时会出现以上错误!!!!!


从网上搜索这个错误的,大多数说是 SecureRandom 产生随机数问题,然后看下我的AES加解密工具类一看,额 没使用这种方式,代码如下:

初始化:

 Security.addProvider(new BouncyCastleProvider());
 key = new SecretKeySpec(keyBytes, KEY_ALGORITHM);
// 初始化cipher
 cipher = Cipher.getInstance(algorithmStr, "BC");

加密:

 cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(ivStr.getBytes("UTF-8")));
 byte[] enbytes = cipher.doFinal(contentStr.getBytes("UTF-8"));
 return new BASE64Encoder().encode(enbytes)

解密:

 byte[] contentBye = new BASE64Decoder().decodeBuffer(base64Str)
 cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(ivStr.getBytes("UTF-8")));
 byte[] dedata = cipher.doFinal(contentBye);
 return new String(dedata, "UTF-8");

将提示错误的Key 和密文拿出来 重新 解密下,哎解密成功了。。

单个密文解密都是成功的,性能压测的时候 就会出现大量的 成功和失败,报的错误都是 pad block corrupted,

然后就将代码重新梳理了变,原来是 工具类中 将 cipher 定义为静态常量了,cipher 不是单例模式,改为 多线程试下,果然 这个错误就没有了。。

微笑


  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值