收藏
回答

EncodingAESKey用commons-codec:1.13解密不了

消息解密时,EncodingAESKey用commons-codec:1.13解密不了。

参考:https://developers.weixin.qq.com/community/develop/doc/0002a00b7bcd088eeb89f4d485b000

https://developers.weixin.qq.com/community/develop/doc/000e46d10d0050aa6559aec3a56400?_at=1578900243140

这问题之前就有人提过了,你们就说你们改不改,你们不改我就把消息加解密方式设置为明文了。

搞个东西是给开发者用的,不是给自己用的,别人用不了这API有什么意义呢?你们的开发人员自己写着玩呢?

回答关注问题邀请回答
收藏

5 个回答

  • mornslit
    mornslit
    02-16

    我也遇到了这个问题,跟你一样用了WxJava。看了代码是要求用base64对EncodingAESKey进行解码,但是commons-codec:1.14有合法性检查,所以过不了。

    后来我还是用了1.14这个版本,但是EncodingAESKey我是用32个字符串(数字或字符)经过base64编码出来的,去掉等号正好是43个字符长度,填到微信后台里,这样就保证EncodingAESKey是可以被commons-codec:1.14解码成功的。

    经过测试,这个方法是可行的。

    02-16
    赞同 1
    回复
  • var
    var
    2天前

    commons-codec:1.13 开始加入了以下代码:

    private void validateCharacter(final int emptyBitsMask, final Context context) {
      if (isStrictDecoding() && (context.ibitWorkArea & emptyBitsMask) != 0) {
             throw new IllegalArgumentException(
    	      "Strict decoding: Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible encoding. " +"Expected the discarded bits from the character to be zero.");
    	        }
    
    

    代码查看地址:https://github.com/apache/commons-codec/blob/master/src/main/java/org/apache/commons/codec/binary/Base64.java

    因此只能使用1.12版本或者更低的版本

    还是希望腾讯能升级一下代码保证能使用新版本的包


    2天前
    赞同
    回复
  • 绿血贵族
    绿血贵族
    星期四 04:54

    用其他的misc 和Java8utils下的包可以解码。那就是commons-codec的问题,不是腾讯的问题。。

    其他语言可以,唯独Java下的一个库不可以,就要改机制。想的太多了。

    星期四 04:54
    赞同
    回复
  • 西瓜叔叔
    西瓜叔叔
    01-13

    算了,腾讯说什么就是什么,没办法,我还是改成明文吧,不折腾了。

    01-13
    赞同
    回复
  • undefined
    undefined
    01-13

    commons-codec:1.13 这个版本解密不了,不能换个版本?

    01-13
    赞同
    回复 5
登录 后发表内容
问题标签