2. 常见密码算法简介:对称加密、非对称加密、哈希函数
聊密码改造,绕不开这三种基础算法。它们就像工具箱里的扳手、螺丝刀和锤子——各有各的用处,也各有各的脾气。你如果搞不清它们的区别,后面做工具选型肯定会踩坑。我最早接手一个银行密钥管理系统时,就因为混淆了对称和非对称的适用场景,差点酿成大错。嗯,今天咱们就把这三兄弟彻底掰扯清楚。
2.1 对称加密:又快又简单,但密钥怎么送?
对称加密,说白了就是「一把钥匙开一把锁」。加密和解密用的是同一个密钥。它最大的优点就是快,硬件加速后能跑几十个 Gbps。
常见的对称算法:
- DES(数据加密标准):56 位密钥,早就是古董了。我见过某老旧系统还在用 DES,一查 PCI DSS 合规直接亮红灯。
- 3DES(三重 DES):DES 的加强版,但慢得要命。NIST 已在 2023 年正式废弃它,别再用了。
- AES(高级加密标准):128/192/256 位密钥,目前最主流。我个人习惯首选 AES-256-GCM,自带认证加密。
- SM4(国密算法):128 位密钥,国内金融、政务系统的标准配置。
我的经验:AES-GCM 模式同时提供了机密性和完整性校验。你在做数据库列加密时,直接选 AES-256-GCM 就好,别再手动拼凑「AES-CBC + HMAC」了。
但对称加密有致命弱点——密钥分发。你想想看,两个人通信,总得先把密钥传过去吧?如果是线下面对面拷 U 盘还行,但互联网场景下怎么安全传递?这就引出了第二种算法。
一句话总结:对称加密适合大数据量加密,但密钥管理是最大的坑。
2.2 非对称加密:解决密钥分发,但慢得让人着急
非对称加密用了「公钥 + 私钥」这对组合。公钥可以公开,私钥自己藏着。你拿公钥加密的数据,只有对应的私钥才能解开。你想想看,这样我就不用担心密钥在半路被截了——公钥本来就是公开的嘛。
常见的非对称算法:
- RSA:基于大数分解,1024/2048/4096 位。我建议至少 2048 位,1024 位早就不安全了。
- ECC(椭圆曲线密码):256 位的 ECC 等效于 3072 位的 RSA,性能更好。你选 SM2(国密)也是基于 ECC 的。
- SM2(国密):中国标准,建议金融机构优先使用。
非对称加密有个明显缺点——慢。RSA 2048 位加密 1 个字节,消耗的时间能顶 AES 加密好几 KB。所以实践中从来不会用非对称加密直接加密大文件,而是用它来加密对称密钥(即密钥协商或密钥封装)。
避坑指南:我之前在项目里见过有人用 RSA 加密图片,结果前端卡死 10 秒。切记:非对称加密只适合加密小数据,比如会话密钥、数字签名的哈希值。
2.3 哈希函数:不可逆,还能防篡改
哈希函数不是加密算法——它没有密钥,也不支持解密。它把任意长度的数据「压缩」成固定长度的指纹(摘要)。而且,它必须是单向的:从哈希值算出原文几乎不可能。
常见的哈希算法:
- MD5:128 位,已完全破解。别再用 MD5 做安全校验了,撞库神器。
- SHA-1:160 位,Google 2017 年就展示了碰撞攻击。退役吧。
- SHA-256 / SHA-3:256 位,目前最安全。我习惯用 SHA-256 做文件完整性校验。
- SM3(国密):256 位,国内推荐,跟 SHA-256 安全性相当。
| 特性 | 对称加密 | 非对称加密 | 哈希函数 |
|---|---|---|---|
| 密钥 | 同一个密钥 | 公钥 + 私钥对 | 无密钥 |
| 速度 | 极快(硬件加速) | 慢(数百倍差距) | 快 |
| 是否可逆 | 可逆(有密钥) | 可逆(有私钥) | 不可逆 |
| 主要用途 | 大数据加密 | 密钥分发、数字签名 | 完整性校验、密码存储 |
| 典型算法 | AES, SM4 | RSA, ECC, SM2 | SHA-256, SM3 |
| 弱点 | 密钥分发困难 | 性能差 | 碰撞风险 |
2.4 它们怎么配合?——混合密码系统
现实中没人只靠一种算法。你想想看,HTTPS 是怎么工作的?客户端用非对称加密安全地把对称密钥发给服务器,之后双方用对称加密通信——这就是「混合密码系统」,又快又安全。
我做过的一个支付网关项目,流程就是这样的:
- 客户端生成一个随机的 AES 密钥(会话密钥)。
- 用服务器的 RSA 公钥加密这个 AES 密钥。
- 服务器用私钥解密得到 AES 密钥。
- 双方用这个 AES 密钥加密后续所有交易数据。
哈希函数也在里面保驾护航:每条消息都带 SHA-256 签名,确保没被篡改过。
核心记住:对称加密管效率,非对称加密管密钥分发,哈希函数管完整性验证。三者各司其职,缺一不可。
2.5 知识体系结构
下面这张图把三种密码算法的核心定位和协作关系画清楚了,自己对照着看看:
一个建议:你在做密码改造方案设计时,先用这张图理清楚「哪个环节该用哪种算法」。别上来就选 RSA 2048 硬怼大数据——你会后悔的。
2.6 实战中的选型原则
我最后给你一个具体的选型清单,按场景分:
- 存储加密(如数据库):AES-256-GCM 或 SM4-GCM。我曾经踩过 CBC 模式的坑——没有完整性保护,数据被改了你都不知道。
- 通信加密(如 API):推荐 TLS 1.3,底层自动做了混合加密。如果做国密改造,用 SM2 做密钥交换 + SM4 做会话加密。
- 数字签名:用 SM2 或 RSA 2048+。注意:签名用私钥,验签用公钥。
- 密码存储:别直接哈希!用 bcrypt 或 Argon2(加盐 + 迭代)。我之前审计过一个项目,他们存密码用 MD5……场面一度很尴尬。
再次强调:任何算法都有生命周期。DES、MD5、SHA-1 已经基本退役。RSA 1024 也在淘汰边缘。你选型时一定要查 NIST 或国密办的最新标准。