关于通信安全与数据加密方法介绍
注:本文的内容旨在介绍在基于安全通信协议的分布式数据爬取与多线程访问系统(即第二次实习)中所运用到的有关通信安全与数据加密部分技术底层进行相对讲解,如需查看完整的项目概述与其他详细内容,请点击下方链接跳转到另一篇文章,如需查看代码,请联系Jackson获取GitHub访问权限,谢谢!
本项目设计了完整的数据通信与信息加密体系,涵盖三大安全模块:
– 通信加密(HTTPS)
– 身份认证(Token)
– 数据加密(RSA / AES / Fernet)
一. 通信加密:HTTPS 协议
HTTP 发送的是明文 明文传输,易被窃听,为了保证安全性,
HTTPS产生:在HTTP基础上用TLS / SSL进行加密 现在主要是TLS
(注:HTTPS不是HTTP的简单加密版,它是HTTP跑在TLS加密通道内的协议组合。)

先简单了解下类比生活“情书💌的传递”
小明暗恋小红,通过大胖传递情书给小红
问题:大胖可以在中间进行“偷看”,“篡改”
于是引入第一种方法——对称加密算法
首先什么是对称加密算法(这里通俗介绍,详细可见AES部分)
小明和小红之间有一套约定的加密规则 (eg: if English letter: then +1 letter)
小明 :”I love you”. 大胖:”M mpwf zpv” 大胖看不懂
大胖:”M mpwf zpv”. 小红:用与小明指定的规则解开了”I love you”.
问题:如果小黑,小白……都喜欢小红,那么小红将存储多个规则(密钥)费空间
于是引入第二种方法——非对称加密算法 (RSA)
公钥私钥 (公钥公开,私钥绝不公开; 公钥加密,私钥解密; 公私钥成对出现)
小明先请求获取小红公钥 -> 小红发送公钥
小明用小红公钥进行情书加密 -> 小红用自己的私钥进行解密
这样就很好了吗?
问题:非对称加密算法效率太低太慢,差几百倍,而且随着加密内容的增加,非对称加密速度效率呈线性下降
于是引入第三种方法——混合加密算法 (非对称+对称)HTTPS
小明先请求获取小红公钥 -> 小红发送公钥
小明自己生成随机生成Randkey 通过请求的公钥对Randkey进行加密 发送randkey
小红拿到后用自己的私钥解密得到Randkey ——非对称加密
小明用randkey对情书内容加密发送 -> 小红用randkey解密情书内容——对称加密
这样完美了吗?
问题:大胖可以自己做一套公钥私钥,在小明申请公钥时,把自己的公钥发给小明;同样套路他也可以伪造小明给小红发信息。
中间人身份伪造问题 + 中间人私发公钥问题
于是可以用第三机构来颁发证书 (SSL 证书)
CA机构:Certificate Authority
小红向CA申请证书 小明拿到自己本身操作系统自带的根证书
小明申请向小红申请公钥 -> 小红返回给小明证书及公钥
小明拿自己的根证书检验小红证书确认发件人小红后完成对小红公钥存储
(后面就与混合加密算法一致了)
小明自己生成随机生成Randkey 通过请求的公钥对Randkey进行加密 发送randkey
小红拿到后用自己的私钥解密得到Randkey ——非对称加密
小明用randkey对情书内容加密发送 -> 小红用randkey解密情书内容——对称加密
╔════════════════════════════════════════════════════════════╗
║ 客户端(浏览器、小明) ║
╚════════════════════════════════════════════════════════════╝
│
│ ① 发起请求:客户端发起 TLS 握手
│ → 包含支持的 TLS 版本、随机数、加密套件列表
▼
╔════════════════════════════════════════════════════════════╗
║ 服务端(网站服务器、小红) ║
╚════════════════════════════════════════════════════════════╝
│
│ ② 返回证书、公钥、随机数
│ → 包含由 CA 签名的证书(含服务器公钥)
▼
客户端验证证书合法性(校验证书链)
└── 如果不合法:中断连接 ❌
└── 如果合法:继续 👇
│
│ ③ 客户端生成“会话密钥”(session key / randkey)
│ → 用服务端公钥加密后发送给服务器
▼
服务端用私钥解密,得到“会话密钥”
│
│ ④ 握手完成,建立安全通道(TLS session)
▼
📶 正式数据传输阶段(双向对称加密)
┌────────────────────────────────────────┐
│ 客户端与服务端使用同一个“会话密钥” │
│ 所有后续通信使用对称加密(如 AES) │
└────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐
│ 客户端 │◀────▶│ 服务端 │
└─────────────┘ └─────────────┘
加密请求数据 加密响应数据
以上是第一部份,最终我们用HTTPS + CA证书可实现通信安全
- 注:本项目并没有实质性模拟HTTPS + CA证书 而选择用免费证书来提高性价比
二. 数据加密(RSA / AES / Fernet)
对数据本身进行加密 在本项目中我们就是对token 登录密码那些进行数据加密
注:本文不详细讲述Fernet 重点讲述RSA & AES
对称加密算法——AES
这部分算法我觉得这个博主讲的太好了 完全没有超越空间了,直接看这个链接吧
Fernet (AES的高级封装,在数据库安全, Token等领域常用)
非对称加密算法——RSA
基本数学概念:防止忘了😁
因数:a * b = c. a / b是c的因数
质数:因数只有1和本身
余数不说了

三. 身份认证(Token)这里用Readme写了一个

四. 参考学习视频
- AES加密算法讲解视频——b站
- https://www.bilibili.com/video/BV1XP4y1A7Ui/?spm_id_from=333.1391.0.0&vd_source=2d33bb0cc56df660aef4d5b952259a01
- https://www.bilibili.com/video/BV1M44y1175D/?spm_id_from=333.1391.0.0&vd_source=2d33bb0cc56df660aef4d5b952259a01
五. 防止部分博客文章乱码,统一附上自用PDF文件下载链接