Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Retrofit/Okhttp API接口加固技术实践(下)

Retrofit/Okhttp API接口加固技术实践(下)

作者头像
开发者技术前线
发布于 2020-11-23 06:49:13
发布于 2020-11-23 06:49:13
74900
代码可运行
举报
运行总次数:0
代码可运行

客官让你久等了,这是接口API加固的下篇,现在可以享用了!

百度首席科学家吴恩达宣布要离职啦,和我有半毛钱关系吗?

上篇加固介绍了APi单纯Post用对称加密(文中用Base64 为简单列子)加密方式,这种加密方式还是存在一定的风险,加密效率虽高,但易破解,本节将介绍怎么用非对称加密 来加解密okhttp的数据,本文采用RSA加密算法为栗子。

对称加密

对称加密是最传统的加密方式,比上非对称加密,缺少安全性,但是它依旧是用的比较多的加密方法。 对称加密采用单密钥加密方式,不论是加密还是解密都是用同一个密钥,即“一把钥匙开一把锁”。对称加密的好处在于操作简单、管理方便、速度快。它的缺点在于密钥在 网络传输中容易被窃听,每个密钥只能应用一次,对密钥管理造成了困难。对称加密的实现形式和加密算法的公开性使它依赖于密钥的安全性,而不是算法的安全性。

对称加密原理以及对称加密算法

对称加密的核心——通信双方共享一个密钥 通信过程: A有明文m,使用加密算法E,密钥key,生成密文c=E(key,m); B收到密文c,使用解密算法D,密钥key,得到明文 m=D(key,c); 比喻: 对称加密是最直观,也是历史最久远的加密手段,类似于加锁和解锁,只不过钥匙的个数非常多(~~2^100),一个人穷其一生也试不完所有可能的钥匙 因此加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大多数的对称算法中,加密密钥和解密密钥是相同的,所以也称这种加密算法为秘 密密钥算法或单密钥算法。它要求发送方和接收方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送或接收的消息解 密,所以密钥的保密性对通信性至关重要。

主要有DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法。

非对称加密

非对称密算法是一种密钥的加密方法。

非对称加密算法需要两个密钥:公钥(publickey)和私钥(privatekey)。公钥与私钥是一对存在,如果用公钥对数据进行加密,只有用对应的私钥才能解密;如果用密钥对数据进行加密,那么只有用对应的公钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。 非对称加密算法实现机密信息交换的基本过程是:甲方生成一对密钥并将其中的一把作为公用密钥向其它方公开;得到该公用密钥的乙方使用该密钥对机密信息进行加密后再发送给甲方;甲方再用自己保存的另一把专用密钥对加密后的信息进行解密。

另一方面,甲方可以使用乙方的公钥对机密信息进行签名后再发送给乙方;乙方再用自己的私匙对数据进行验签。 甲方只能用其专用密钥解密由其公用密钥加密后的任何信息。 非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。 非对称密码体制的特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。对称密码体制中只有一种密钥,并且是非公开的,如果要解密就得让对方知道密钥。所以保证其安全性就是保证密钥的安全,而非对称密钥体制有两种密钥,其中一个是公开的,这样就可以不需要像对称密码那样传输对方的密钥了。这样安全性就大了很多。

列如 :支付宝的加密方式就采用非对称加密方式,支付宝会给客户提供支付宝证书,作为用户验证是否是来自支付宝的数据,防止第三方假冒支付宝,而客户手中持有私钥,用户支付宝发送的数据经过支付宝的公钥进项加密,则支付宝可以采用自己的的私钥进行解密。

工作过程

  • 1.A要向B发送信息,A和B都要产生一对用于加密
  • 2.A的私钥保密,A的公钥告诉B;B的私钥保密,B的公钥告诉A。
  • 3.A要给B发送信息时,A用B的公钥加密信息,因为A知道B的公钥。
  • 4.A将这个数据发给B(已经用B的公钥加密消息)。
  • 5.B收到这个数据后后,B用自己的私钥解密A的消息。其他所有收到这个报文的人都无法解密,因为只有B才有B的私钥。

通俗点可以这么理解:

  • 浏览器向服务器发出请求,询问对方支持的对称加密算法和非对称加密算法;服务器回应自己支持的算法。
  • 浏览器选择双方都支持的加密算法,并请求服务器出示自己的证书;服务器回应自己的证书。
  • 浏览器随机产生一个用于本次会话的对称加密的钥匙,并使用服务器证书中附带的公钥对该钥匙进行加密后传递给服务器;服务器为本次会话保持
  • 该对称加密的钥匙。第三方不知道服务器的私钥,即使截获了数据也无法解密。非对称加密让任何浏览器都可以与服务器进行加密会话。

浏览器使用对称加密的钥匙对请求消息加密后传送给服务器,服务器使用该对称加密的钥匙进行解密;服务器使用对称加密的钥匙对响应消息加密后传送给浏览器,浏览器使用该对称加密的钥匙进行解密。第三方不知道对称加密的钥匙,即使截获了数据也无法解密。对称加密提高了加密速度

数字证书

数字证书就是互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。它是由权威机构——CA机构,又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。 数字证书绑定了公钥及其持有者的真实身份,它类似于现实生活中的居民身份证,所不同的是数字证书不再是纸质的证照,而是一段含有证书持有者身份信息并经过认证中心审核签发的电子数据,广泛用在电子商务和移动互联网中。。 通俗讲就是车管所会给每个车辆进行认证颁发车牌,通过车牌我们可以查到所有车辆和驾驶员的信,二数字证书就辨别唯一身份,支付宝等的数字证书就是公开的,这不是支付宝自己决定,而是由国际组织认证,这样不管是哪个用户首先就可以根据浏览器返回的证书辨别支付宝的真伪。

数字签名

数字签名用来,保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。 数字签名是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。接收者只有用发送者的公钥才能解密被加密的摘要信息,然后用HASH函数对收到的原文产生一个摘要信息,与解密的摘要信息对比。如果相同,则说明收到的信息是完整的,在传输过程中没有被修改,否则说明信息被修改过,因此数字签名能够验证信息的完整性。如果中途数据被纂改或者丢失。那么对方就可以根据数字签名来辨别是否是来自对方的第一手信息数据。 数字签名是个加密的过程,数字签名验证是个解密的过程。

参数加解密

首先,Android中生成了对称密钥:

代码语言:javascript
代码运行次数:0
运行
复制

然后将SecretKeySpec转换为Base64字符串格式:

代码语言:javascript
代码运行次数:0
运行
复制

调用函数:

代码语言:javascript
代码运行次数:0
运行
复制

用SecretKeySpec加密数据:

代码语言:javascript
代码运行次数:0
运行
复制

使用拦截器:

然后将字符串秘密AES密钥和加密的数据(用这个AES密钥加密)使用okhttp使POST请求。字符串密钥使用的是RSA加密。

代码语言:javascript
代码运行次数:0
运行
复制

在服务器端可以解密(从RSA)秘密AES密钥,并得到它的字符串表示。在客户端(Android)和服务器端(server)上是一样的。使用这个字符串AES密钥解密数据。

代码语言:javascript
代码运行次数:0
运行
复制

如果客户端对服务端返回的数据解密也是同样的道理。和上面是个逆过程,这里不再累赘了。

总结

完整的非对称加密过程

假如现在 你向支付宝 转账(术语数据信息),为了保证信息传送的保密性、真实性、完整性和不可否认性,需要对传送的信息进行数字加密和签名,其传送过程为:

  • 1.首先你要确认是否是支付宝的数字证书,如果确认为支付宝身份后,则对方真实可信。可以向对方传送信息,
  • 2.你准备好要传送的数字信息(明文)计算要转的多少钱,对方支付宝账号等;
  • 3.你 对数字信息进行哈希运算,得到一个信息摘要(客户端主要职责);
  • 4.你 用自己的私钥对信息摘要进行加密得到 你 的数字签名,并将其附在数字信息上;
  • 5.你 随机产生一个加密密钥,并用此密码对要发送的信息进行加密(密文);
  • 6.你用 支付宝的公钥对刚才随机产生的加密密钥进行加密,将加密后的 DES 密钥连同密文一起传送给支付宝;
  • 7.支付宝收到 你 传送来的密文和加密过的 DES 密钥,先用自己的私钥对加密的 DES 密钥进行解密,得到 你随机产生的加密密钥;
  • 8.支付宝 然后用随机密钥对收到的密文进行解密,得到明文的数字信息,然后将随机密钥抛弃;
  • 9.支付宝 用你 的公钥对 你的的数字签名进行解密,得到信息摘要;
  • 10.支付宝用相同的哈希算法对收到的明文再进行一次哈希运算,得到一个新的信息摘要;
  • 11.支付宝将收到的信息摘要和新产生的信息摘要进行比较,如果一致,说明收到的信息没有被修改过。
  • 12 确定收到信息,然后进行向对方进行付款交易,一次非对称密过程结束。在这后面的流程就不属于本次非对称加密的范畴,算支付宝个人的自我流程,也就是循环以上过程。

技术 - 资讯 - 感悟

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 开发者技术前线 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
五分钟掌握PKI核心原理!
公开密钥基础设施( PKI, Public Key Infrastructure )逐步在国内外得到广泛应用。我们是否真的需要 PKI , PKI 究竟有什么用? 下面通过一个案例一步步地来剖析这个问
安智客
2018/03/30
3.2K1
五分钟掌握PKI核心原理!
对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与HTTPS简介
对称加密算法使用的加密和解密的密钥一样,比如用秘钥123加密就需要用123解密。实际中秘钥都是普通数据在互联网传输的,这样秘钥可能会被中间人截取,导致加密被破解。其过程如下:
恋喵大鲤鱼
2019/03/11
13.5K3
对称加密、非对称加密、RSA、消息摘要、数字签名、数字证书与HTTPS简介
只用10分钟,一次性搞懂公钥和私钥
关于什么是公钥和私钥,网上有一篇很经典的文章:http://www.youdzone.com/signature.html
zhanyd
2024/05/17
1.8K0
只用10分钟,一次性搞懂公钥和私钥
理解证书验证系列——HTTPS
这种方式加密和解密同用一个密钥。加密和解密都会用到密钥。没有密钥就无法对密码解密,反过来说,任何人只要持有密钥就能解密了。
mingjie
2022/05/12
9000
理解证书验证系列——HTTPS
【网络原理】深入理解HTTPS协议
HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况.
用户11369350
2025/05/04
1580
【网络原理】深入理解HTTPS协议
简述https的几种加密方式
加密方式 常见的加密方式:对称加密和非对称加密。 对称加密算法和非对称加密算法只不过是密码学中的两种加密算法罢了,所谓的算法就是一种可以将信息从一种形式转变为另一种形式的规则。 对称加密 概念:对称密钥加密,又称为对称加密、私钥加密、共享秘钥加密,是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单地相互推算的密钥。 对称加密也可以理解为一方通过密钥将信息加密之后,把密文传给另一方,另一方通过这个相同的密钥将密文解密,转换成可以理解的明文。它们之间的关系如下: 明文<->密钥
田维常
2019/07/16
5.3K0
SSL及其加密通信过程「建议收藏」
SSL英文全称Secure Socket Layer,安全套接层,是一种为网络通信提供安全以及数据完整性的安全协议,它在传输层对网络进行加密。它主要是分为两层:
全栈程序员站长
2022/09/07
4K1
SSL及其加密通信过程「建议收藏」
【Linux|计算机网络】HTTPS工作原理与安全机制详解
HTTP 协议内容都是按照文本的方式明文传输的. 这就导致在传输过程中出现一些被篡改的情况。
用户11316056
2024/11/19
5800
【Linux|计算机网络】HTTPS工作原理与安全机制详解
即时通讯安全篇(九):为什么要用HTTPS?深入浅出,探密短连接的安全性
对于IM开发者来说,IM里最常用的通信技术就是Socket长连接和HTTP短连接(通常一个主流im会是这两种通信手段的结合)。从通信安全的角度来说,Socket长连接的安全性,就是基于SSL/TLS加密的TCP协议来实现的(比如微信的mmtls,见《微信新一代通信安全解决方案:基于TLS1.3的MMTLS详解》);而对于HTTP短连接的安全性,也就是HTTPS了。
JackJiang
2022/05/13
7660
即时通讯安全篇(九):为什么要用HTTPS?深入浅出,探密短连接的安全性
详解Https是如何确保安全的?
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL
哲洛不闹
2018/09/18
9460
详解Https是如何确保安全的?
Https 协议简析及中间人攻击原理
对称加密算法的特点是加密密钥和解密密钥是同一把密钥K,且加解密速度快,典型的对称加密算法有DES、AES等
BUG弄潮儿
2021/08/13
1.3K0
为什么HTTPS比HTTP更安全?
近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器、搜索引擎、CA机构、大型互联网企业的共同促进下,互联网迎来了“HTTPS加密时代”,HTTPS将在未来的几年内全面取代HTTP成为传输协议的主流。
心莱科技雪雁
2019/06/05
4890
为什么HTTPS比HTTP更安全?
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
HTTPS(Hypertext Transfer Protocol Secure)是一种安全的网络通信协议,它在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS的安全基础是SSL/TLS协议,它存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。这个系统提供了身份验证与加密通讯方法,被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。由于HTTPS协议内容都是按照文本的方式明文传输的,就导致在传输过程中出现一些被篡改的情况。
枫叶丹
2024/07/12
1700
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
谈谈HTTPS演变过程
本文谈谈HTTPS设计演变过程,希望对大家理解HTTPS有帮助,有不对的地方欢迎指出。
捡田螺的小男孩
2020/04/14
4030
大白话详解HTTPS!
我相信大家面试的时候对于 HTTPS 这个问题一定不会陌生,可能你只能简单的说一下与 HTTP 的区别,但是真正的原理是否很清楚呢?他到底如何安全?这一篇让我们用大白话来揭开 HTTPS 的神秘面纱吧!
民工哥
2020/09/15
7590
大白话详解HTTPS!
从零玩转系列之微信支付安全 | 技术创作特训营第一期
halo各位大佬很久没更新了最近在搞微信支付,因商户号审核了我半个月和小程序认证也找了资料并且将商户号和小程序进行关联,至此微信支付Native支付完成.此篇文章过长我将分几个阶段的文章发布(项目源码都有,小程序和PC端)
杨不易呀
2023/07/14
5190
从零玩转系列之微信支付安全 | 技术创作特训营第一期
【愚公系列】软考高级-架构设计师 064-信息安全技术
信息安全技术是一种涉及保护计算机系统、网络和数据不受未经授权的访问、使用、泄露或破坏的技术和方法。信息安全技术的主要目标是确保信息的机密性、完整性和可用性,防止信息在传输和存储过程中遭到未经授权的访问或修改。
愚公搬代码
2024/07/08
2570
【HTTP】HTTPS TLS 1.2
在个人过去的读书笔记中已经介绍过一次,在这一篇文章中介绍了HTTP1.1的缺点,以及SSL、TLS的历史,之后介绍了有关SSL加密的主要加密方案:公开密钥加密 和 共享密钥加密,最后简单介绍了HTTPS的交互过程,但是书中的过程比较粗,这节我们讲细一点点。
阿东
2022/09/12
1.3K0
HTTP原理与通信流程
HTTP是不会对请求的双方进行身份验证的,服务器不会校验客户端的身份,谁都可以向服务器发送请求,任何人都的请求都会进行响应; 客户端也不会验证响应的数据是否是由自己请求的目标服务器所发出。
vimsudoers
2020/02/29
1.1K0
真正“搞”懂HTTPS协议16之安全的实现
  然后,我们还学了HTTPS到底是什么,以及HTTPS真正的核心SSL/TLS是什么。最后我们还聊了聊TLS的实现,也就是OpenSSL。
zaking
2023/02/16
7530
真正“搞”懂HTTPS协议16之安全的实现
相关推荐
五分钟掌握PKI核心原理!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验