Https和Http的关系
Https是Http里的一层加密层,如果协议走了这一层加密层,那么就是https。如果没有,则是单纯的http。
因为没有走ssl/tls这层加密层,所以这是单纯的http协议,数据在网络中传输是明文的,也就是裸奔的,所以http协议在网络中传输其实是不安全的。
而https协议会走这一层加密层,所以从传输层开始,所有的数据都是密文的。而这比起http,是相当安全的。
所以http和https的区别就是,https的数据是加密后传输的,而http的数据则是网络中裸奔。所以http其实是不安全的!
数据加密的原理
那么数据如何加密? 这里有一个最简单的加密例子。 客户端和服务端都有一个密钥key,客户端用密钥对数据进行加密,随后把加密后的数据发送给服务器。服务器用密钥解密,得到传过来的数据。
而传输过去的b则是一个加密后的值。int b = key ^ daya 是加密的过程。而int data = b ^ key 是解密的过程。这就是数据加密的原理。
所以数据加密是非常重要的。假如我们在外面的时候,连上了别人的wifi,那么我们发送的所有请求都是从该wifi所在的路由器中发送出去的。也就是说我们发送的请求都会先转发到路由器,而如果我们的数据没有加密,那么我们的数据就会被不心术不正之人截获。这是非常严重的。
HTTPS加密方案
首先我们要明白加密分为对称加密和非对称加密。对称加密就是上面那个例子所说,只有一个密钥。通过密钥加密,也用密钥解密。 而非对称加密则是分为公钥和私钥,公钥是公开的,全世界人都可以知道,而私钥只有自己知道,是不公开的。可以通过公钥加密,私钥解密。也可以通过私钥加密,公钥解密。都是可以的。
相信我们应该都知道百度网盘的秒传功能,就是明明有时候我们上传的文件明明很大,却是一瞬间就上传完了。这是什么原理呢?
实际上,在上传的时候,百度网盘的客户端会先把文件用hash散列的方式转变成一个字符串。我们称这个字符串为摘要 ,在对摘要进行数据签名(签名下面会说,就是对摘要的一种加密) 。 随后把加密后的摘要发送到百度网盘的服务器,而百度网盘的服务器会在后台进行查找。看摘要是否存在,如果摘要不存在,则让你上传,并把该摘要保存一份,建立摘要与文件的映射关系。如果摘要存在,则找到摘要对应的文件,创建一个软链接,给你的账户映射。
所以这样就可以保证,网盘中真正存储的文件只有一份(也有可能有备份)。摘要是一串固定长度的字符串,当你上传文件的时候先文件进行hash散列然后形成摘要发送给网盘服务器,网盘服务器去判断摘要是否存在。不存在就让你上传该文件并形成一份摘