Base64加密后的数据通过http传输后,后台接收到的数据会出现空格的问题分析 空格:url编码后,会用+号替换原来位置的空格 加号(+):url编码后,会用%2替换原来位置的+ form表单提交,默认是application/x-www-form-urlencoded,因此会对参数进行urlencode
http请求传输参数
http传输参数的时,url编码后会将url传输的参数【空格】转变为【+】号 如下:
1 urlencode之前:www.baidu.com?name=zhang san
2 urlencode之后:www.baidu.com?name=zhang+san
3 urlencode之前:www.baidu.com?name=zhang+san
4 urlencode之后:www.baidu.com?name=zhang%2san
由上可见,+会变为%2,空格会变为+
base64加密参数Http传输
base64中,加号(+)是base64编码的一部分,如果将+号转变为空格,就会导致解密失败。
现在应该很清楚为什么base64后,通过http请求后,数据丢失的原因了吧。
1、Base64加密后的数据:
gLi5lSf1FW+r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU+J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ+tCegU8xj85Xp7bG3Fyfd6k=
在对Base64加密进行http传输时,后台收到的数据会出现空格的现象。如下
gLi5lSf1FW r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ tCegU8xj85Xp7bG3Fyfd6k=
这就导致传输的数据和接收的数据不一致,导致解密失败
2、base64 http请求,如何将+号进行urlEncode
设置http请求头(对参数进行urlEncode操作) Content-Type: application/x-www-form-urlencoded
3、Base64 urlEncode后:
gLi5lSf1FW%2r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU%2J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ%2tCegU8xj85Xp7bG3Fyfd6k=
4、后台接收的数据:
gLi5lSf1FW+r1nuhjheOlA2vYlbt1U9kOKnGPPG/LZU+J7qlqUSckCtGfRiQkkqgfZHwEGaBZkpGWuIyZ+tCegU8xj85Xp7bG3Fyfd6k=
这时,接收的base64数据和传输的是结果一致,可以正常解密了。
什么是:application/x-www-form-urlencoded 简单的讲就是form表单提交,from表单提交会默认对参数进行encode操作。 浏览器会对form表单的数据进行url编码,把form数据转换成一个字串(name1=value1&name2=value2…),然后把这个字串append到url后面,用?分割,加载这个新的url
如果表单有加号(+),url编码后会变为%2,这时后接收数据后,对参数解码后转变为+号 如果表单有空格,url编码后会变为+,后台接收数据化,解码变为空格
如果是用的程序写的http请求,需要加一个请求头Content-Type: application/x-www-form-urlencoded,这样就会对参数进行加密操作