关于BASE64中+号被编码后再通过后台解析变成空格的问题处理

发布时间 2023-04-07 17:28:14作者: freewsf

一  问题使用场景

有一串BASE64的用户信息,需要通过URL传递到后台进行验证,当里面带有+号的时候,默认浏览器会对+号进行编码,变成%2B,后台获取后,%2B会decode变成空格,这时候,会造成解析失败的问题出现。

举例:

http://localhost:802/test/index?userinfo=eyJ1c2VyX2xldmVsIjoiXzFfXyx3yXyxfNl8sXzRfIiwibW9iaWxlX3Bob25lIjoiMTgxNzE3OTcwMjAiLCJ1c2VyX3R5cGUiOgAmFtZSI6IuadqOaZi%2Ba6kCIsInVzZXJfY2VydF9sZXZlbCI6IjQiLCJpZF9jYXJkIjoiNDIxMTI1MTk5MTA5MTgwMDM3IiwiaWRfY2FyZF90eXBlIjoiMCJ9&action=&oper=#

当我们通过后台进行:

获取:var userinfo = request.getParameter("userinfo");   

这时候就会发现,获取到的 userinfo的值为: eyJ1c2VyX2xldmVsIjoiXzFfXyx3yXyxfNl8sXzRfIiwibW9iaWxlX3Bob25lIjoiMTgxNzE3OTcwMjAiLCJ1c2VyX3R5cGUiOgAmFtZSI6IuadqOaZi a6kCIsInVzZXJfY2VydF9sZXZlbCI6IjQiLCJpZF9jYXJkIjoiNDIxMTI1MTk5MTA5MTgwMDM3IiwiaWRfY2FyZF90eXBlIjoiMCJ9

Zi后面是一个空格,这时候解析decode,就会报错。

进行解码: String loginInfo = new String(Base64.getDecoder().decode(userinfo));

 

二  处理方式

拼接之前,将 + 号全部替换成 - 号 【注:base64使用的字符为 大小写字母共 52个,0-9共10个,/和+号  共64个,=号作为填充字符使用

info=info.replaceAll("\\+","-");   

处理完成后,在后台直接获取,在decode之前作反向替换:

userinfo=userinfo.replaceAll("-","\\+");

String loginInfo = new String(Base64.getDecoder().decode(userinfo));