“填充无效,无法被移除”--排错过程

今天在对微信退款结果的req_info进行解密时报了这个错误,搞了很久才解决。好记性不如烂笔头,所以记录下排错过程。

排错过程:
1、debug发现错误是在执行AES解密方法时出错
2、网上找了一圈AES解密方法,找到一个完整的AES加解密过程,并且和我的解密逻辑是一样的。于是拷贝下来,在vs2017里新建了一个单元测试用例,然后把代码粘贴进去
3、运行发现可以正常解密,那就可以证明方法本身逻辑没有错
4、接着,在这个测试用例里将要解密的字串改成和 AES加密后字串不同的字串,执行方法,发现会报“填充无效,无法被移除”的错误,于是很激动地想是不是微信post过来的req_info其实并没有做base64解密。
5、自己在正式代码里对req_info做base64解密后再调用AES解密方法,结果在“byte[] toEncryptArray = Convert.FromBase64String(s);”这行就报错了!错误信息说s是非base64字串。我没有自己做base64解密之前,这行代码还能顺利执行,自己做base64解密之后反而不能执行,说明微信post回来的的确是已经做了base64解密了。
6、于是转换思路,将AES加解密的key值搞不一样试试看。于是将测试用例里AES解密的key改成另外一个值,让它和加密的key不一样,结果真的又报了“填充无效,无法被移除”错误!于是认真检查正式代码里key的加密逻辑,最终发现自己对key做md5后没有转小写!!
7、加上转小写的处理后再测试,成功解密,问题解决了&

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值