使用官方算法库
官方代码
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
原因
解决办法
方法一
- 使用guava代替官方commons-codec
1.1 引入guava
1.2 使用BaseEncoding.base64().decode(sEncodingAESKey )
代替Base64.decodeBase64(sEncodingAESKey + "=");
方法二
- 将commons-codec包升级到官方代码示例中的1.9版本
方法三
- 使用 commons-codec 加密 32 位字符(我是用的 UUID 生成 ID 后去除 -)
- 生成一个 EncodingAESKey 替换微信生成的 EncodingAESKey
Base64.encodeBase64String(UUID.randomUUID().toString().replaceAll("-","").getBytes());
- 第二步得到一个 44 位字符串,需要去除末尾等号得到 43 位EncodingAESKey,再去企业微信配置此EncodingAESKey
参考连接 lgm一点笔记
念兮为美