微信小程序 密文解码遇上的错误:unable to decode base64 string: invalid characters encountered in base64 data

博主在用java做微信小程序的密文解码时遇到了这个问题。挠人的是这个错误只是偶尔出现,但是很影响使用体验。经过一番排查总算找到了错误原因。
这是一个很容易忽视的坑。具体错误`:

2021-03-10 21:43:32.224 ERROR 25476 --- [nio-443-exec-93] o.s.b.w.servlet.support.ErrorPageFilter  : Forwarding to error page from request [/user/loggingByPhone] due to exception [unable to decode base64 string: invalid characters encountered in base64 data]

org.bouncycastle.util.encoders.DecoderException: unable to decode base64 string: invalid characters encountered in base64 data
	at org.bouncycastle.util.encoders.Base64.decode(Unknown Source) ~[bcprov-jdk15on-1.65.jar:1.65.0]
	at com.justwannago.SQL.ThirdClassTools.WechatUtil.decryptData(WechatUtil.java:30) ~[classes/:0.0.1-SNAPSHOT]
	at com.justwannago.SQL.ThirdClassTools.WechatUtil.mainDecode(WechatUtil.java:20) ~[classes/:0.0.1-SNAPSHOT]
	at com.justwannago.SQL.service.UserServiceImplement.Decode(UserServiceImplement.java:116) ~[classes/:0.0.1-SNAPSHOT]
	at com.justwannago.SQL.controller.justTest.getInfoByPhone(justTest.java:65) ~[classes/:0.0.1-SNAPSHOT]
	at sun.reflect.GeneratedMethodAccessor424.invoke(Unknown Source) ~[na:na]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_151]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_151]

出错在于从微信API传输的session有时包含“\”,而Base64的处理字符中不包含""字符,所以需要把session_key字符串中的右斜杠删除。

平时正常解密提供的session大多是以下这种:
xCHPs4Pw6ojOHuRARWMsAQ==(除去两个等号,共22个字符,一般而言session_key就是这个长度)

但是偶尔会出现以下这种:
Je854c9dFCi3BwhDKG/gnw==(除去两个等号,共23个字符,其中\不是Base64可以处理的字符)

出现原因:当session_key中包含左斜杠时,会连带包含有转义的右斜杠,Base64无法处理右斜杠,于是报错。
解决方案:在调用解码类之前把字符串中的右斜杠替换为空即可

session_key = session_key.replace("\\", "");//session_key中可能出现\这个符号,会导致invalid错误
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值