![d0e4b7731237cda5a90e1a54939764be.png](https://i-blog.csdnimg.cn/blog_migrate/ab0e67955a89aa3de8c2d31ef9b81e5b.png)
接下来我就给大家好好介绍下,我是如何从申请API Key学到Https协议再到加密算法的。
首先介绍Htttp,Http是一种超本文协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频等超文本数据的约定和规范。
那Https呢?比Http多了一个“S”,这个“S”指的是“Secure”,安全。所以Https就相当于在Http协议上加了安全,所以我们也可以给Https个定义。
它指的是一个在计算机世界里专门在两点之间安全的传输文字、图片、音频等超文本数据约定和规范。 Https是Http协议的一种扩展,它本身并不保证安全性,它使用的是传输层安全性(TLS)或者安全套接字层(SSL)对通信协议进行加密。Https协议提供了3个关键指标:
加密,Https通过对数据加密来使用户在浏览网站时,没人能够监听他和网站之间的数据交换。
数据一致性,数据在传输过程中不会被窃听者修改,用户发送的数据会完整传输到服务端,保证用户发送的是什么,服务器接受到的就是什么。
身份验证,确认“你就是你”,确认对方的真实身份。
前面我也说了,Https使用的是TLS或SSL对通信协议进行加密的,那什么是TLS/SSL呢?
TLS,英文全称 Transport Layer Security,它是SSL(Secure Socket Layer)的后续版本,它们都是用在互联网中两台计算机之间用于身份验证和加密的协议。 TLS在根本上使用对称加密和非对称加密两种形式。点题的重点来了,非对称加密!对称加密!对称加密
![7817f12cf4945c73d9d9b0d624983f2b.png](https://i-blog.csdnimg.cn/blog_migrate/b841546e030d1af8295f812a64be134b.png)
对称算法看起来好像解决了信息加密的问题,传输的加密信息只有拥有密钥的人才能解密,但是问题来了?如何保证这个密钥的传输是加密的呢?所以这就需要非对称加密了
非对称加密
一般AB相互传输数据的时候,各会有一对公钥私钥。公钥全部分发到网上,但是私钥会各自保管好。
A给B传输信息,用B的公钥对信息进行加密,这样只有B才能用自己的私钥进行解密;B再给A传输信息,用A的公钥对信息进行加密,这样也就只有A进行解密。这样也就解决了对称加密中密钥的传输如何保证机密性的问题。
![3c85963e046f5eb3f8599bfaa893fe65.png](https://i-blog.csdnimg.cn/blog_migrate/0b97a6d4d259b96842f44a65e3e54c51.png)
TLS里有很多中对称加密的算法,目前常用的是AES和ChaCha20;
非对称加密算法的设计要比对称加密算法难很多,在TLS里只有很少的几种,最著名的就是RSA,我对这个名词都很有印象,大学课本提过。
RSA
RSA公钥加密算法是素数的一个典型应用。素数我想大家应该都知道,也就是质数,只能被1和自身整除。
RSA的安全性基于“整数分解”的数学难题,使用两个超大素数的乘积作为生成密钥的材料,想要从公钥推出私钥是非常困难的。
对极大整数做因数分解的难度决定了RSA算法的可靠性。换言之,对一极大整数做因数分解越困难,RSA算法越可靠。
假如有人找到一种快速因数分解的算法的话,那么用RSA加密信息的可靠性就会极度下降,但现实中,只有非常短的RSA钥匙才会被强力方式攻破。到目前为止,世界上还没有任何可靠攻击RSA算法的方式。只要其钥匙的长度足够长,那么RSA加密的信息实际上是不会被攻破的。
那么RSA算法是如何用素数进行加密解密计算的呢?我附上一张推理过程的图吧,敲字有点麻烦。忽略我字不咋地哈~
![5d13a13533063ff73d88a25240461314.png](https://i-blog.csdnimg.cn/blog_migrate/e9031be68ee887b8db29262d88fcc263.png)
其中因为C^D和M^E的值计算出来特别大,所以非对称加密解密的速度非常慢。
那么是不是可以将对称加密和非对称加密结合起来,两者相互取长补短,这样既可以高效的加密解密,又可以安全交换密钥。
这就是现在TLS里使用的 混合加密方式,在通信刚开始的时候使用非对称算法,解决密钥交换问题;然后再用随机数产生对称算法使用的“会话密钥”,再用公钥加密,对方拿到密文用私钥解密,取出“会话密钥” 。 这样后续就可以使用会话密钥即对称算法进行通信,而不必使用非对称算法了。以上就是我从项目中设计申请API Key延伸到加密算法的学习历程,学习过程中两个特别深的感悟:
- 大学没好好学习啊,这些好像大学课本上都提过
数学踏马的可真牛逼牛逼牛逼!(其中非对称算法里还有一个ECC,它是基于“椭圆曲线离散对数”的难题,使用特定的曲线方程和基点生成公钥和私钥。比特币也是选择ECC作为加密算法的,有一说一,小编现在是真不太看得懂,涉及到数学基础知识有点高,希望我有朝一日可以看的明白)