博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
记一个Base64编码后经网络传输产生的问题
阅读量:6085 次
发布时间:2019-06-20

本文共 760 字,大约阅读时间需要 2 分钟。

hot3.png

问题:机器特征码经过网络传输之后,‘+’都变成了‘ ’

详情:机器特征码提取了机器cpuId和mac地址信息,最后经过Base64编码后生成的字符串,一开始我使用的是

String strs = new BASE64Encoder().encode(bt);

来编码,编码后的字符串形如:Wc6zkdzzR3wd7/pcDWR3MmJdH6+bgbQoUH7w3q6zRsJVt6+I8XoBhg==

当把这个字符串通过参数的形式上传到服务器时,发现服务端收到的字符串所有的‘+’都变成了‘ ’,

如:Wc6zkdzzR3wd7/pcDWR3MmJdH6 bgbQoUH7w3q6zRsJVt6 I8XoBhg==

如何解决:一开始在服务端,强行做了字符串替换,今天早上在看Java 8新特性的时候,发现Base64其实提供了三种编解码,分别是基本,URL, MIME。

所以联想到之前的这个问题,是不是可以用URL的Encoder和Decoder来替换原来的BASE64Encoder 和 BASE64Decoder,果然,

String strs = Base64.getUrlEncoder().encodeToString(bt);

获得的机器码变成了:

Wc6zkdzzR3wd7_pcDWR3MmJdH6-bgbQoUH7w3q6zRsJVt6-I8XoBhg==

‘/’和‘+’这种不适合网络传输的字符没有了,分别被‘_’和‘-’所取代了。

只要decoder也换成对应的

Base64.Decoder decoder = Base64.getUrlDecoder();

就可以不用在服务端做丑陋的替换了。

 

 

转载于:https://my.oschina.net/u/4042451/blog/3017566

你可能感兴趣的文章
对 Sea.js 进行配置(一) seajs.config
查看>>
第六周
查看>>
解释一下 P/NP/NP-Complete/NP-Hard 等问题
查看>>
javafx for android or ios ?
查看>>
微软职位内部推荐-Senior Software Engineer II-Sharepoint
查看>>
sql 字符串操作
查看>>
【转】Android布局优化之ViewStub
查看>>
网络安全管理技术作业-SNMP实验报告
查看>>
根据Uri获取文件的绝对路径
查看>>
Flutter 插件开发:以微信SDK为例
查看>>
.NET[C#]中NullReferenceException(未将对象引用到实例)是什么问题?如何修复处理?...
查看>>
边缘控制平面Ambassador全解读
查看>>
Windows Phone 7 利用计时器DispatcherTimer创建时钟
查看>>
程序员最喜爱的12个Android应用开发框架二(转)
查看>>
vim学习与理解
查看>>
DIRECTSHOW在VS2005中PVOID64问题和配置问题
查看>>
MapReduce的模式,算法以及用例
查看>>
《Advanced Linux Programming》读书笔记(1)
查看>>
zabbix agent item
查看>>
一步一步学习SignalR进行实时通信_7_非代理
查看>>