ICE.ICE|

韩憨

园龄:4年7个月粉丝:42关注:47

Base64 空格,加号问题(oss)

缘由:

在一个项目中,app请求tcpdump日志与记录的日志内容不一致

请求%2B 识别成 +

请求 + 识别成 空格

这个在base64解密的时候会出现异常,base64需要的是加号,而不是空格

造成的原因:

在js中,对url的加密分别由三种方式:

1
2
3
4
5
6
7
8
escape("aa+aa aa")
"aa+aa%20aa"
 
encodeURI("aa+aa aa")
"aa+aa%20aa"
 
encodeURIComponent("aa+aa aa")
"aa%2Baa%20aa"

第三种方式,+变成%2B

java代码:

1
2
System.out.println(URLEncoder.encode("aa+aa aa","UTF-8"));
aa%2Baa+aa

特么加号变成%2B,空格变成加号

如果是没经过加密,但是解密了

1
2
System.out.println(URLDecoder.decode("aa+aa aa","UTF-8"));
aa aa aa

好吧,从这里就可以看出,为什么base64解密报错了

app端进行base64加密,内部含有+,然后并没有进行url加密,直接传给后端,后端对其先进行Url解密,+变成了空格,再进行base64解密,所以报错。

规范:

造成这种混乱局面的原因在于:

W3C标准规定,当Content-Type为application/x-www-form-urlencoded时,URL中查询参数名和参数值中空格要用加号+替代,所以几乎所有使用该规范的浏览器在表单提交后,URL查询参数中空格都会被编成加号+。

而在另一份规范(RFC 2396,定义URI)里, URI里的保留字符都需转义成%HH格式(Section 3.4 Query Component),因此空格会被编码成%20,加号+本身也作为保留字而被编成%2B,对于某些遵循RFC 2396标准的应用来说,它可能不接受查询字符串中出现加号+,认为它是非法字符。所以一个安全的举措是URL中统一使用%20来编码空格字符。

Java中的URLEncoder本意是用来把字符串编码成application/x-www-form-urlencoded MIME格式字符串,也就是说仅仅适用于URL中的查询字符串部分,但是URLEncoder经常被用来对URL的其他部分编码,它的encode方法会把空格编成加号+,与之对应的是,URLDecoder的decode方法会把加号+和%20都解码为空格,这种违反直觉的做法造成了当初我对空格URL编码问题的困扰。

因此后来我的做法都是,在调用URLEncoder.encode对URL进行编码后(所有加号+已被编码成%2B),再调用replaceAll(“+”, “%20″),将所有加号+替换为%20。

本文作者:韩憨

本文链接:https://www.cnblogs.com/hanby/p/18100813

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩憨  阅读(189)  评论(0编辑  收藏  举报
//看板娘

哥伦布

评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 隔离 (Studio Live Duet) 陈凯咏,林家谦
  2. 2 明知做戏 吴雨霏
  3. 3 残酷游戏 卫兰
  4. 4 你,好不好? 周兴哲
  5. 5 我可以 蔡旻佑
  6. 6 云烟成雨 房东的猫
  7. 7 说散就散 JC 陈咏桐
  8. 8 我配不上你 夏天Alex
  9. 9 不再联系 夏天Alex
  10. 10 等我先说 夏天Alex
  11. 11 我知道他爱你 夏天Alex
  12. 12 多想在平庸的生活拥抱你 隔壁老樊
  13. 13 这一生关于你的风景 隔壁老樊
  14. 14 我曾 隔壁老樊
  15. 15 关于孤独我想说的话 隔壁老樊
  16. 16 过客 周思涵
  17. 17 备爱 周思涵
  18. 18 嚣张 en
  19. 19 海口 后弦
我可以 - 蔡旻佑
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

寄 没有地址的信

这样的情绪 有种距离

你 放着谁的歌曲

你 放着谁的歌曲

是怎样的心情

能不能说给我听

雨 下得好安静

是不是你偷偷在哭泣

幸福 真的不容易

在你的背景 有我爱你~

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

寄 没有地址的信

寄 没有地址的信

这样的情绪 有种距离

你 放着谁的歌曲

是怎样的心情

能不能说给我听

雨 下得好安静

是不是你偷偷在哭泣

幸福 它真的不容易

在你的背景 有我爱你~

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

我可以 陪你去看星星

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

He...

He...

点击右上角即可分享
微信分享提示