加密基础理论:对称加密、非对称加密、哈希算法
聊加密之前,我想先问你一个问题:你写接口测试的时候,有没有遇到过“加密字段怎么传?”这种困惑?
说实话,我在刚做测试开发那会儿,被问得一愣一愣的。后来我发现,不管是接口测试还是集成测试,都绕不开加密。你把一个字段加密发送,服务端怎么解?用什么算法?这背后就是加密基础理论。
这一章,我带你捋清三种最核心的加密技术:对称加密、非对称加密、哈希算法。搞懂它们的区别,后面的章节你才会轻松很多。
1. 对称加密:一把钥匙开一把锁
对称加密,说白了就是加密和解密用同一个密钥。你想想看,这就好比你和另一个同事共用一把门锁钥匙——你锁门,他开门,钥匙是一样的。
最常见的对称加密算法:AES(Advanced Encryption Standard)、DES(已过时)、3DES。我个人习惯用 AES-256,安全性够,性能也不错。
特点:
- 速度快——适合加密大量数据
- 密钥管理麻烦——怎么把密钥安全地传给对方?这是个问题
- 算法公开,安全依赖密钥保密
2. 非对称加密:公钥加密,私钥解密
非对称加密就聪明多了——它有一对密钥:公钥(公开)和私钥(自己留着)。公钥加密的数据只有对应的私钥能解开;反过来,私钥签名的数据,公钥可以验证。
常见算法:RSA、ECC(椭圆曲线)。RSA 应用最广,ECC 性能更好,但理解起来绕一点。
特点:
- 速度慢——不适合加密大量数据,通常用来加密对称密钥或做签名
- 密钥分发简单——公钥随便发,私钥自己藏好
- 能做数字签名,验证身份和完整性
3. 哈希算法:单向的“指纹”
哈希算法和上面两种完全不一样。它不是加密——它是单向的。你输入任意长度的数据,它给你输出固定长度的摘要(也叫哈希值)。而且从摘要你几乎不可能反推出原文(单向性)。
常用算法:MD5(不安全,别用了)、SHA-1(也过时了)、SHA-256(目前推荐)、SHA-3。
特点:
- 不可逆——只有正向计算,没有逆向解密
- 定长输出——无论输入多大,输出固定位数(比如SHA-256输出256位)
- 抗碰撞——很难找到两个不同输入产生同一个哈希值
- 密码存储(加盐再哈希)
- 文件完整性校验(下载后对比哈希值)
- 数字签名的基础(先哈希原文,再对哈希签名)
bcrypt(一种加盐哈希),才算过关。记住:存密码千万不要用明文,也不要用没加盐的简单哈希。
三者的核心区别——一张表说清楚
| 对比维度 | 对称加密 | 非对称加密 | 哈希算法 |
|---|---|---|---|
| 密钥 | 一个密钥(共享秘密) | 公钥 + 私钥(一对) | 无密钥 |
| 方向性 | 加密和解密用同一个密钥 | 公钥加密,私钥解密(或私钥签名) | 单向,不可逆 |
| 速度 | 快(适合大量数据) | 慢(适合少量数据) | 快 |
| 主要用途 | 数据加密传输 | 密钥交换、数字签名 | 完整性校验、密码存储 |
| 典型算法 | AES, DES, 3DES | RSA, ECC, DSA | MD5, SHA-256, SHA-3 |
你看,每个技术都有自己的定位。实际项目中,它们经常组合使用——比如 HTTPS 协议里,先用非对称加密交换一个对称密钥,然后用对称密钥加密后续通信;同时还会用哈希算法做完整性校验。
总结:一张 SVG 图帮你理清关系
下面这张图展示了三种技术在整个加密体系中的位置和交互关系。我画的时候特意把“组合使用”的箭头标出来了。
嗯,图里能看到,对称加密和非对称加密之间有一条虚线——表示它们经常组合使用(比如 TLS 握手)。哈希算法的虚线连向非对称加密,表示签名前通常先哈希原文。