加密基础理论:对称加密、非对称加密、哈希算法

聊加密之前,我想先问你一个问题:你写接口测试的时候,有没有遇到过“加密字段怎么传?”这种困惑?

说实话,我在刚做测试开发那会儿,被问得一愣一愣的。后来我发现,不管是接口测试还是集成测试,都绕不开加密。你把一个字段加密发送,服务端怎么解?用什么算法?这背后就是加密基础理论。

这一章,我带你捋清三种最核心的加密技术:对称加密、非对称加密、哈希算法。搞懂它们的区别,后面的章节你才会轻松很多。

1. 对称加密:一把钥匙开一把锁

对称加密,说白了就是加密和解密用同一个密钥。你想想看,这就好比你和另一个同事共用一把门锁钥匙——你锁门,他开门,钥匙是一样的。

最常见的对称加密算法:AES(Advanced Encryption Standard)、DES(已过时)、3DES。我个人习惯用 AES-256,安全性够,性能也不错。

特点:

  • 速度快——适合加密大量数据
  • 密钥管理麻烦——怎么把密钥安全地传给对方?这是个问题
  • 算法公开,安全依赖密钥保密
我的一点经验:在项目中,我常用对称加密来加密请求体里的敏感字段(比如手机号、身份证号)。但密钥不能写死在代码里,得从配置中心动态获取,而且还要定期轮换。

2. 非对称加密:公钥加密,私钥解密

非对称加密就聪明多了——它有一对密钥:公钥(公开)和私钥(自己留着)。公钥加密的数据只有对应的私钥能解开;反过来,私钥签名的数据,公钥可以验证。

常见算法:RSA、ECC(椭圆曲线)。RSA 应用最广,ECC 性能更好,但理解起来绕一点。

特点:

  • 速度慢——不适合加密大量数据,通常用来加密对称密钥或做签名
  • 密钥分发简单——公钥随便发,私钥自己藏好
  • 能做数字签名,验证身份和完整性
避坑指南:我曾经见过有人用 RSA 加密几兆的文件,结果加密过程慢得离谱。记住,非对称加密不是用来加密大块数据的,它更适合做“密钥交换”或“签名”。

3. 哈希算法:单向的“指纹”

哈希算法和上面两种完全不一样。它不是加密——它是单向的。你输入任意长度的数据,它给你输出固定长度的摘要(也叫哈希值)。而且从摘要你几乎不可能反推出原文(单向性)。

常用算法:MD5(不安全,别用了)、SHA-1(也过时了)、SHA-256(目前推荐)、SHA-3。

特点:

  • 不可逆——只有正向计算,没有逆向解密
  • 定长输出——无论输入多大,输出固定位数(比如SHA-256输出256位)
  • 抗碰撞——很难找到两个不同输入产生同一个哈希值
核心用途:
  • 密码存储(加盐再哈希)
  • 文件完整性校验(下载后对比哈希值)
  • 数字签名的基础(先哈希原文,再对哈希签名)
我的惨痛教训:我曾经在早期项目里直接用 MD5 存用户密码,结果被安全审计一顿骂。后来改成 bcrypt(一种加盐哈希),才算过关。记住:存密码千万不要用明文,也不要用没加盐的简单哈希。

三者的核心区别——一张表说清楚

对比维度 对称加密 非对称加密 哈希算法
密钥 一个密钥(共享秘密) 公钥 + 私钥(一对) 无密钥
方向性 加密和解密用同一个密钥 公钥加密,私钥解密(或私钥签名) 单向,不可逆
速度 快(适合大量数据) 慢(适合少量数据) 快
主要用途 数据加密传输 密钥交换、数字签名 完整性校验、密码存储
典型算法 AES, DES, 3DES RSA, ECC, DSA MD5, SHA-256, SHA-3

你看,每个技术都有自己的定位。实际项目中,它们经常组合使用——比如 HTTPS 协议里,先用非对称加密交换一个对称密钥,然后用对称密钥加密后续通信;同时还会用哈希算法做完整性校验。

总结:一张 SVG 图帮你理清关系

下面这张图展示了三种技术在整个加密体系中的位置和交互关系。我画的时候特意把“组合使用”的箭头标出来了。

加密基础技术关系图 三大加密技术核心关系 加密体系 对称加密 AES / DES 非对称加密 RSA / ECC 哈希算法 SHA-256 / MD5 组合使用 非对称加密传递对称密钥 完整性校验 哈希算法为签名提供数据摘要 注:虚线表示“通常配合使用”的关系

嗯,图里能看到,对称加密和非对称加密之间有一条虚线——表示它们经常组合使用(比如 TLS 握手)。哈希算法的虚线连向非对称加密,表示签名前通常先哈希原文。