收藏
回答

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

 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
回答关注问题邀请回答
收藏

6 个回答

  • 唐佳星
    唐佳星
    02-24

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

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

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

    错误都逻辑:

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


    正确都逻辑:

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



    02-24
    赞同 1
    回复
  • ZYZ
    ZYZ
    2019-12-13

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

    2019-12-13
    赞同
    回复 2
    • 念西风,独自凉
      念西风,独自凉
      01-02
      那如果是这样的话,请问前端是需要检测一下code是否过期是吗?
      01-02
      回复
    • Tai
      Tai
      01-03
      请问你们是怎么解决这个问题的了?
      01-03
      回复
  • 芳筱凤
    芳筱凤
    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
    赞同
    回复 7
    查看更多(2)
登录 后发表内容