0
点赞
收藏
分享

微信扫一扫

记一次企业微信回调解密报错

戴老师成长记录仪 2022-03-25 阅读 55
java

使用官方算法库

官方代码

import org.apache.commons.codec.binary.Base64;

public class Test{
@Test
public void testDecodeBase64(){
String sToken = "QDG6eK";
String sCorpID = "wx5823bf96d3bd56c7";
String sEncodingAESKey = "jWmYm7qr5nMoAUwZRjGtBxmz3KA1tkAj3ykkR6q2B2C";

try {
// WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(sToken, sEncodingAESKey, sCorpID);
// 实际等于
Base64.decodeBase64(sEncodingAESKey + "=");
} catch (AesException e) {
e.printStackTrace();
}
}
}

异常

java.lang.IllegalArgumentException: Last encoded character (before the paddings if any) is a valid base 64 alphabet but not a possible value

原因

解决办法

方法一

  1. 使用guava代替官方commons-codec
    1.1 引入guava
    1.2 使用 BaseEncoding.base64().decode(sEncodingAESKey ) 代替 Base64.decodeBase64(sEncodingAESKey + "=");

方法二

  1. 将commons-codec包升级到官方代码示例中的1.9版本

方法三

  1. 使用 commons-codec 加密 32 位字符(我是用的 UUID 生成 ID 后去除 -)
  2. 生成一个 EncodingAESKey 替换微信生成的 EncodingAESKey
    Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());
  3. 第二步得到一个 44 位字符串,需要去除末尾等号得到 43 位EncodingAESKey,再去企业微信配置此EncodingAESKey

参考连接 lgm一点笔记

念兮为美

举报

相关推荐

0 条评论