接口请求 URL转码
什么是URL转码
不管是以何种方式传递url时,如果要传递的url中包含特殊字符,如想要传递一个+,但是这个+会被url会被编码成空格,想要传递&,被url处理成分隔符。
尤其是当传递的url是经过Base64加密或者RSA加密后的,存在特殊字符时,这里的特殊字符一旦被url处理,就不是原先你加密的结果了。
如图所示,访问接口参数我传递参数为 1+1 结果浏览器显示结果为 1 1 很明显 '+' 被转化成了空格。
转码之前访问:

如果别人调用你接口传递的参数如果有特殊字符,那么你就需要进行转码进行处理,不然就会导致参数错误,如上图所示。
解决方案:
public static void main(String[] args) {
    //转码方法
    String encode = URLEncoder.encode("1+1");
    System.out.println("转码:" + encode);
    //解码方法
    String decode = URLDecoder.decode(encode);
    System.out.println("解码:" + decode);
}
控制台输出结果: 转码:1%2B1 解码:1+1 转码之后访问:
url特殊符号及对应的编码:
| 符号 | url中的含义 | 编码 | 
| + | URL 中+号表示空格 | %2B | 
| 空格 | URL中的空格可以用+号或者编码 | %20 | 
| / | 分隔目录和子目录 | %2F | 
| ? | 分隔实际的URL和参数 | %3F | 
| % | 指定特殊字符 | %25 | 
| # | 表示书签 | %23 | 
| & | URL中指定的参数间的分隔符 | %26 | 
| = | URL中指定参数的值 | %3D | 
对称加密与非对称加密
对称机密和解密都使用同一个密钥。在加密解密过程中,使用同一个密钥进行加解密。
为什么使用数据加密
PRC远程调用的时候,保证数据安全性问题 针对数据进行加密。
防止别人抓包分析Http请求,获取明文数据并进行篡改。可以使用 postman 发送请求,使用 fidder 进行抓包分析数据并篡改。


由上面的结果可以知道,我发送的请求 的参数为 xiaoming,经过抓包之后我篡改了数据 将参数修改为了 大白,数据就这样被篡改了,所以我们在调用接口的时候应该避免出现这样的请求。
未加密流程图:

加密后流程图:

常见的对称加密技术
DES(数据加密标准):分组式加密,算法源于Lucifer,作为NIST对称式加密标准;64位(有效位56位、校验8位),分组算法
AES(高级加密标准):DES升级版,算法出自Rinjindael
3DES:128位,分组算法
IDEA(国际数据加密算法):128位,比DES快,分组算法
Blowfish:32-448位,算法公开,分组算法
RC4:流密码,密钥长度可变
RC5:分组密码,密钥长度可变,最大2048位
Rijndael:128位/196位/256位
对称密码的优点
用户只需记忆一个密钥,就可用于加密、解密;
与非对称加密方法相比,加密解密的计算量小,速度快,简单易用,适合于对海量数据进行加密处理 。
对称密码的缺点
如果密钥交换不安全,密钥的安全性就会丧失。特别是在电子商务环境下,当客户是未知的、不可信的实体时,如何使客户安全地获得密钥就成为一大难题。
如果用户较多情况下的密钥管理问题。N*(N-1)/2
如果密钥多个用户被共享,不能提供抗抵赖性
对称加密使用场景:速度非常快。服务器与服务器端之间进行通讯。后台与后台进行通讯。
对称密码案例
假设Alice和Bob是认识的,两人为了保证通信消息不被其它人截取,预先约定了一个密码,用来加密在他们之间传送的消息,这样即使有人截取了消息没有密码也无法知道消息的内容。由此便实现了机密性。
1、密码是不能够使用对称加密的,如果使用对称加密会被反向破解出来的,按照互联网隐私的情况下是不能够反向解密的。
2、密码使用单向加密的,单项加密特征:是不可以被逆向破解的。MD5 单向加密一般都会进行加盐处理。
加盐的目的:防止别人破解的,如果拿不到盐值是无法破解的。

如何保证APP接口安全
使用Https传输、使用令牌、使用非对称加密。Http+Json 方式进行数据传输。
移动App接口是不能使用对称加密的。
因为对称加密,密钥都是相同的,如果黑客反编译破解移动打包apk,就可以得到密钥,然后拿到我们对应的参数,所以移动App不能使用对称加密。
非对称加密(公钥与私钥)
使用一对密钥:一个用于加密信息,另一个则用于解密信息。可以使用第三方工具生成非对称密钥对。
两个密钥之间存在着相互依存关系:即用其中任一个密钥加密的信息只能用另一个密钥进行解密。
其中加密密钥不同于解密密钥,公钥加密私钥解密,反之也可私钥加密公钥解密。
密钥依据性质划分,将其中的一个向外界公开,称为公钥;另一个则自己保留,称为私钥。公钥(Public key)常用于数据加密(用对方公钥加密)或签名验证(用对方公钥解密),私钥(Private key)常用于数据解密(发送方用接收方公钥加密)或数字签名(用自己私钥加密)。
机密性、完整性、抗抵赖性
公钥加密,私密解密(安全)。目前来说是最安全的加密手段,
缺点:效率低。
应用场景:第三方支付对接、核心的金融机构。
使用令牌方式实现参数传递安全方法


接口请求 URL转码的更多相关文章
- 接口测试-Java代码实现接口请求并封装
		前言:在接口测试和Java开发中对接口请求方法进行封装都非常有必要,无论是在我们接口测试的时候还是在开发自测,以及调用某些第三方接口时,都能为我们调用和调试接口提供便捷: Java实现对http请求的 ... 
- C# 动态创建SQL数据库(二)  在.net core web项目中生成二维码  后台Post/Get 请求接口 方式  WebForm 页面ajax 请求后台页面 方法  实现输入框小数多 自动进位展示,编辑时实际值不变  快速掌握Gif动态图实现代码  C#处理和对接HTTP接口请求
		C# 动态创建SQL数据库(二) 使用Entity Framework 创建数据库与表 前面文章有说到使用SQL语句动态创建数据库与数据表,这次直接使用Entriy Framwork 的ORM对象关 ... 
- IOS-网络(GET请求和POST请求、HTTP通信过程、请求超时、URL转码)
		// // ViewController.m // IOS_0129_HTTP请求 // // Created by ma c on 16/1/29. // Copyright © 2016年 博文科 ... 
- http statusCode(状态码)请求URL返回状态值的含义
		http statusCode(状态码)请求URL返回状态值的含义 请求URL浏览器返回状态码的含义(http statusCode): 201-206都表示服务器成功处理了请求的状态代码,说明网页可 ... 
- restful接口就是url嘛,通过http请求发起访问。那接口进行监控,就可以监控这个restful url嘛
		EasyAPI接口管理系统 专注API接口监控,让您的API接口更稳定,与APP更紧密 + 购买监控服务 接口性能分析 分析App对应的API接口请求性能,包含HTTP响应时间.吞吐率.HTTP错误率 ... 
- struts2请求过程源码分析
		Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品,相 ... 
- struts2请求过程源码分析(转)
		Struts2是Struts社区和WebWork社区的共同成果,我们甚至 可以说,Struts2是WebWork的升级版,他采用的正是WebWork的核心,所以,Struts2并不是一个不成熟的产品, ... 
- 爬虫新手学习2-爬虫进阶(urllib和urllib2 的区别、url转码、爬虫GET提交实例、批量爬取贴吧数据、fidder软件安装、有道翻译POST实例、豆瓣ajax数据获取)
		1.urllib和urllib2区别实例 urllib和urllib2都是接受URL请求相关模块,但是提供了不同的功能,两个最显著的不同如下: urllib可以接受URL,不能创建设置headers的 ... 
- Vue + webpack  项目配置化、接口请求统一管理
		准备工作 需求由来: 当项目越来越大的时候提高项目运行编译速度.压缩代码体积.项目维护.bug修复......等等成为不得不考虑而且不得不做的问题. 又或者后面其他同事接手你的模块,或者改你的bug ... 
随机推荐
- Borg、Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训 原创: 韩佳瑶 译  Docker  2016-03-23Borg、Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训 原创: 韩佳瑶 译  Docker  2016-03-23
			Borg.Omega和Kubernetes:谷歌十几年来从这三个容器管理系统中得到的经验教训 原创: 韩佳瑶 译 Docker 2016-03-23 
- OpenGL ES: (2) OpenGL ES 与 EGL、GLSL的关系
			OpenGL ES 是负责 GPU 工作的,目的是通过 GPU 计算,得到一张图片,这张图片在内存中其实就是一块 buffer,存储有每个点的颜色信息等.而这张图片最终是要显示到屏幕上,所以还需要具体 ... 
- Maven中的SnapShot版本和Release版本
			# Maven中的SnapShot版本和Release版本 ## 区别 - SnapShot 快照版本- Release 发布版本 ## 重要区别 - 本地获取这些依赖的机制不同,如果是快照版本,Ma ... 
- Android Studio 3.5新特性
			Android Studio 3.5新特性 原文链接:https://blog.csdn.net/jklwan/article/details/99974869 Android Studio ... 
- linux服务器下安装phpstudy 如何命令行进入mysql
			配置了phpstudy 可是进不去mysql 老是报-bash: mysqld: command not found 解决方法:在linux环境下运行:ln -s /phpstudy/mysql/bi ... 
- osg fbx模型中任何一个节点染色(着色)
			void setNodeStateset(osg::Node *nodeParam) { osg::ref_ptr<osg::StateSet> stateset1 = nodeParam ... 
- Python3 中codecs进行文件的读取
			简单的概念与说明 编码(动词):按照某种规则(这个规则称为:编码(名词))将"文本"转换为"字节流".而在python 3中则表示:unicode变成str 解 ... 
- Ubuntu 16.04 haproxy 简单配置应用
			HAproxy HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性.负载均衡,以及基于TCP和HTTP的应用程序代理. 测试环境 ubuntu16.04 192.168.20 ... 
- python面向对象之封装,继承,多态
			封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容.在python的类中,封装即通过__init__函数将数据赋给对应的变量进行保存,便于其他地方使用 所以,在使用面向对象的封装特 ... 
- Django:文章详情页面评论功能需要登录后才能使用,登录后自动返回到文章详情页
			背景: 文章详情页正在查看文章,想评论一下写的不错,但是需要先登录才能.页面长这个样子: 方案: 1.点击登录链接时,将该页面的URL传递到登录视图中 request.path获取的是当前页面的相对路 ... 
 
			
		