收藏
回答

小程序手机号解密 偶发性解密异常?

 javax.crypto.BadPaddingException: Given final block not properly padded

后台解密 偶尔解密失败  重新调用都是成功的

byte[] encData =  Base64.decodeBase64(encryptedData);
byte[] ivStr = Base64.decodeBase64(iv);
byte[] key = Base64.decodeBase64(sessionKey);
AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivStr);
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
String dataResult = new  String(cipher.doFinal(encData),"UTF-8");


最后一次编辑于  2019-08-05
回答关注问题邀请回答
收藏

10 个回答

  • 唐佳星
    唐佳星
    2020-02-24

    https://blog.csdn.net/SangHongxv/article/details/88602978

    刚刚解决了,一直是思路错了,一直在找各种不同的代码去解密,结果都是一样会有时解密失败。

    最后看了上述文章,才明白,是接入顺序错误了

    错误都逻辑:

    用户授权(bindgetuserinfo)--》wx.login()[获取sessionKey]--》授权手机号码(bindgetphonenumber


    正确都逻辑:

    wx.login()[获取sessionKey]--》用户授权(bindgetuserinfo)--》授权手机号码(bindgetphonenumber



    2020-02-24
    有用 3
    回复 1
    • 阳光灿烂
      阳光灿烂
      2021-12-02
      不获取用户信息也会出现这个问题,是什么原因呢
      2021-12-02
      回复
  • x''Inlife
    x''Inlife
    2023-09-18

    https://blog.csdn.net/wh7pwb98/article/details/131115516

    2023-09-18
    有用
    回复
  • 🍀¹⁹₉₅鹏℘࿐
    🍀¹⁹₉₅鹏℘࿐
    2023-06-28

    这个问题我这边也遇到了,,很奇怪,在同事电脑上项目中都可以获取到数据,,我电脑项目中就无法获取到,就直接报错了,同样的代码,导包也是一样的,不清楚是啥问题了,很奇怪

    javax.crypto.BadPaddingException: Given final block not properly padde\d. Such issues can arise if a bad key is used during decryption.

    2023-06-28
    有用
    回复
  • ^O^
    ^O^
    2022-04-08

    javax.crypto.BadPaddingException: Given final block not properly padded

    2022-04-08
    有用
    回复 1
    • ^O^
      ^O^
      2022-04-08
      那位大佬指点一下
      2022-04-08
      回复
  • 阳光灿烂
    阳光灿烂
    2021-12-03

    我的解决方式是:先login获取code,然后再让用户点击按钮获取手机号,这样没出来问题了。原先的我的步骤是:1、先获取加密的手机号,2、再获取code,这样就会报错了。用户信息调用的是getUserProfile这个接口,按照业务流程放哪里都可以。

    2021-12-03
    有用
    回复
  • ZYZ
    ZYZ
    2019-12-13

    我来告诉大家这个问题的根本原因是什么,前端传给你的参数有三个一个code  一个iv 一个加密的字符串,用code换取sessionkey再解密加密数据,解密失败的时候,你不妨拿你上一次的sessionkey来解密试试 你会发现 竟然解密成功。其实就是前端在上一个code还没过期的情况下获取的手机号加密数据,然后发给你的时候又重新获取了一个code跟加密数据一起传给你。

    2019-12-13
    有用
    回复 3
    • jam
      jam
      2020-01-02
      那如果是这样的话,请问前端是需要检测一下code是否过期是吗?
      2020-01-02
      回复
    • Tai
      Tai
      2020-01-03
      请问你们是怎么解决这个问题的了?
      2020-01-03
      回复
    • 品歌🎉
      品歌🎉
      2020-06-10
      这个解释不通,后端的sessionkey是根据前端检查session有没有过期来更新的,如果前端没有过期,后端也不会更新,还是用的原来sessionkey来解密的。
      2020-06-10
      回复
  • 芳筱凤
    芳筱凤
    2019-12-12

    解决了没有啊 我也遇到了QAQ

    2019-12-12
    有用
    回复
  • 🚂💨
    🚂💨
    2019-12-06

    麻烦问一下,解决没有呢? 我这边也是偶然发生!

    2019-12-06
    有用
    回复
  • 如若时光倒流s
    如若时光倒流s
    2019-11-20

    你好 我也遇到了这个问题 我用的 python3 官方sdk, 但是偶尔会出现这种情况

    2019-11-20
    有用
    回复
  • 铭锋科技
    铭锋科技
    2019-08-05

    失败提示

    2019-08-05
    有用
    回复 11
    查看更多(6)
登录 后发表内容