java后台接口数据是如何加密传输的
看到很多url的参数值是一长串看不懂的字符串,肯定是加密了。那么java服务器一般是怎么做的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
看到很多url的参数值是一长串看不懂的字符串,肯定是加密了。那么java服务器一般是怎么做的呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
一般情况你看到的应该不算是"加密" 而是"URL编码" (大多数情况)。
"URL编码"通常是为了处理参数里有不可用字符的问题。
比如
下载时
http://localhost/download?filename=新建文档+备份 副本.doc
这样的连接必然会有问题,中文会乱码,加号会被当作连接符,而空格会被服务器当作结束,剩下的内容就被丢弃了。
所以你后台接到的请求实际上会是这样
http://localhost/download?filename=??????
即便你后台强制转码
new String(filename.getBytes("iso-8859-1"),"UTF-8")
那也只会是
http://localhost/download?filename=新建文档备份
为了解决这样的问题所以就会用到URL编码,他的作用其实和html的实体字符一个意思,就是为了不让浏览器/服务器自作多情的进行解析。
而且后台的服务器一般都可以自动处理URL编码,将他们还原回原来的字符串,所以你获取参数时一般不需要你手动解码,直接可以获取到解码后的原字符串。
在java里可以用java.net.URLEncoder.encode(str,charset)实现;
例如刚刚那个用java可以这样写
response.sendredirect("http://localhost/download?filename=" + URLEncoder.encode("新建文档+备份 副本.doc","UTF-8"));
最终显示就会是这个样子
http://localhost/download?filename=%e6%96%b0%e5%bb%ba%e6%96%87%e6%a1%a3%2b%e5%a4%87%e4%bb%bd+%e5%89%af%e6%9c%ac.doc
每个业务逻辑都不一样,得看具体的场景:
一般的,url加密处于以下目的(欢迎补充):
1 base64编码保护由于&等引起的截断攻击
2 对称加密保护敏感数据,在服务器端可解析,Token的一种可能但不是唯一的实现原理
3 (md5等)hash加密做签名保护另一个数据的完整性
4 政策规定必须加密
5 URL唯一,这时候加密的参数是全球唯一的,这个可以在订单啊,啥里面用
6 混淆视听的加密,这个其实没啥用,加密玩的
......
在服务器端,一般是两种:
对称加密是可以解析的,因为它持有解钥
其他md5,一般只在服务器端做检验。
具体实现怎么加密,自己写一个试试就知道了。
一种简单的对称加密算法的原理是:
假如A需要加密,A{en}B=>C 此时发送C,服务器得到C后,通过C{de}B得到A。这个是两方都持有解钥的。还有非常多的实现,这个最low。
url 里可以base64编码
不过base64不是加密算法
网上有可逆的加密算法,你百度下吧