收藏
回答

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有什么意义呢?你们的开发人员自己写着玩呢?

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

6 个回答

  • mornslit
    mornslit
    2020-02-16

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

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

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

    2020-02-16
    有用 2
    回复 1
    • 2023-01-30
      这个可以
      2023-01-30
      回复
  • 绿血贵族
    绿血贵族
    2020-02-20

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

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

    2020-02-20
    有用 1
    回复
  • 鹏哥
    鹏哥
    2023-11-17
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.16.0</version>
    </dependency>
    

    

    在你的WEB工程中引入如上commons-codec版本。 
    


    如果引入的依赖包有与之冲突的版本,请使用

    <exclusion>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
    </exclusion>
    

    将冲突的包排除掉。

    微信加密推过来的报文如下:


    <xml>
        <AppId><![CDATA[wxXXXXX]]></AppId>
        <Encrypt><![CDATA[iEmcIRyvpIxajr4knyDDch36Vf2EYzaP+czY/ku/+2XXDVl9BF54U3y+fZleAClXaHR9Em2yQcVJrx0kou8F9xjJA6O1xq2mN4BawPsdATqCEKY16ZExcuexBvG9NHS82+qI0JlGAw8CvHibNCNftZYuRO6bgGv0nUrUn1gr1zCwDDA5Gh1xFAute+p17WndpgNLrOUGtbxgYaL7shZLKE/MRzPmzYLqngjYP7oj215B1axbf02E0d0T0jAvkAY9zNheMF7cWZCSUGGsogm/C1KXCDQ4nlL5E/V4oUt2cp8fBDZXGSR7cWj9r0V/3L6hMdoAmF3onx9AbQx4yuV3qcppiYX4TAjEi4v7zJ09RrOaVegS0HkVNiS1RCVpsjGMCw+eA25uWr+36QXJGKGH7QJG5uA/b1WZCi0RPaC9QepMO+O5CJJAYva034CGa1L4xDu7VPH+CpCrBDD97Z8ZNQ==]]></Encrypt>
    </xml>
    
    
    


    篇幅有限 有不明白的加微信进一步交流: comeon_betty



    2023-11-17
    有用
    回复
  • 半壁斜阳
    半壁斜阳
    2021-04-08

    说得好,什么鬼东西

    2021-04-08
    有用
    回复 1
    • 半壁斜阳
      半壁斜阳
      2021-04-08
      折腾了一下午,codec换了好几个版本都不行😤😤
      2021-04-08
      回复
  • var
    var
    2020-02-22

    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版本或者更低的版本

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


    2020-02-22
    有用
    回复
  • 西瓜叔叔
    西瓜叔叔
    2020-01-13

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

    2020-01-13
    有用
    回复
登录 后发表内容
问题标签