收藏
回答

微信 WXBizMsgCrypt解密失败,AesException:解密后得到的buffer非法?

WXBizMsgCrypt.java

解密过程,如下:

/**

* 对密文进行解密.

* @param text 需要解密的密文

* @return 解密得到的明文

* @throws AesException aes解密失败

*/

String decrypt(String text) throws AesException {

byte[] original;

try {

// 设置解密模式为AES的CBC模式

Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");

SecretKeySpec key_spec = new SecretKeySpec(aesKey, "AES");

IvParameterSpec iv = new IvParameterSpec(Arrays.copyOfRange(aesKey, 0, 16));

cipher.init(Cipher.DECRYPT_MODE, key_spec, iv);


// 使用BASE64对密文进行解码

byte[] encrypted = Base64.decodeBase64(text);


// 解密

original = cipher.doFinal(encrypted);

} catch (Exception e) {

e.printStackTrace();

throw new AesException(AesException.DecryptAESError);

}


String xmlContent, from_appid;

try {

// 去除补位字符

byte[] bytes = PKCS7Encoder.decode(original);


// 分离16位随机字符串,网络字节序和AppId

byte[] networkOrder = Arrays.copyOfRange(bytes, 16, 20);


int xmlLength = recoverNetworkBytesOrder(networkOrder);


xmlContent = new String(Arrays.copyOfRange(bytes, 20, 20 + xmlLength), CHARSET);

from_appid = new String(Arrays.copyOfRange(bytes, 20 + xmlLength, bytes.length),

CHARSET);

} catch (Exception e) {

e.printStackTrace();

throw new AesException(AesException.IllegalBuffer);

}


// appid不相同的情况

if (!from_appid.equals(appId)) {

throw new AesException(AesException.ValidateAppidError);

}

return xmlContent;


}

上面代码中,标红处解密出错,如下:

需要解密的内容如下:

<xml>

    <AppId><![CDATA[wx715ef430c8070462]]></AppId>

    <Encrypt><![CDATA[5NWqy2SBB3fPlQRkrHUDe2SnrQGpeCvI04jXc7WmGJQeuCoTlssyopMuCnX2tsrmfw+oEJUugOLV6RFT65dfyJ7PS3uGpH+WzFq+gJuSQYu40cQllKNHuV7tI+hnp7HfQrZ5a9aJUGNDgz4EJuimtkIVo+DaPgA/CfxRd1eDBtnvqcYzJ10f7lXImPa2RuSDvyxBiT3d6JzH3BSz8oMSw7ah8WEIp0B38X1WlTGk7UdP2RMcSO2GgCjP4kN593EQBR0g8lJPb04Xo4bDrdDEChGhhMxzi1Y7ywZxwvrm0oWyVdX6DTfAoh6X4+tQic/BoWjlrMaYC2GHwUJ83E1FQr6eEAsPezMfkGYln/GVlkuiMilozDueyT8KQkF/rCmx6T9SZLix7/eq/VJsDbwVcg3stgwLfhCUHnS+LUXNZ4tdlbr4xt/N/u8CzFOr+SlVeOCZ8xa7L7JeIH9rvO/93g==]]></Encrypt>

</xml>

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

5 个回答

  • 龙
    2023-11-01

    楼主已解决,连个屁也不放 可见其素质低下。我来说一下,我的报错 (微信 WXBizMsgCrypt解密失败,AesException:解密后得到的buffer非法?java.lang.IllegalArgumentException: 20 > -367029533)我是因为 微信开放平台下 之前有一个第三方平台账号,因为业务问题又申请了一个,第二个账号为了偷懒跟第一个账号的 开发配置里 的 消息校验Token 和 消息加解密Key 相同,之后改了第二个账号的token 和 加解密key 就没问题了。

    2023-11-01
    有用
    回复
  • DeMon
    DeMon
    2023-05-25

    出现该问题时,再次确认encodingAesKey是否与微信后台配置一致,如果不一致会导致出现“解密后得到的buffer非法”的错误

    2023-05-25
    有用
    回复 1
    • zhy
      zhy
      03-13
      确认过配置是一致的,但还是报,感觉是哪里配置错了,因为传过来的密文拿去解密会报,如果用那个 demo先对一个 明文加密,然后解密是可以成功的。请问各位大佬有遇到过这种情况的吗
      03-13
      回复
  • 叶子
    叶子
    2022-09-29

    请问怎么解决的

    2022-09-29
    有用
    回复
  • HY
    HY
    2021-09-26

    楼主分享一下解决办法,目前还是遇到了同样的问题

    我是照官方的 demo 做的

    2021-09-26
    有用
    回复
  • 只如初见
    只如初见
    2021-06-30

    已解决

    2021-06-30
    有用
    回复 8
    • 图灵的猫
      图灵的猫
      2021-07-05
      你好怎么解决的,我的也是解密不出来,求教
      2021-07-05
      回复
    • 怜一
      怜一
      2021-07-22
      怎么解决的
      2021-07-22
      回复
    • 吴海潮
      吴海潮
      2021-11-25
      能分享一下解决办法吗
      2021-11-25
      回复
    • 飞冬雪
      飞冬雪
      2022-03-11
      能分享一下怎么解决的吗
      2022-03-11
      回复
    • 鸿翎
      鸿翎
      2022-04-10
      期待回复下解决方案,感觉这个问题无解
      2022-04-10
      回复
    查看更多(3)
登录 后发表内容