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, SM4RSA, ECC, SM2SHA-256, SM3
弱点密钥分发困难性能差碰撞风险

2.4 它们怎么配合?——混合密码系统

现实中没人只靠一种算法。你想想看,HTTPS 是怎么工作的?客户端用非对称加密安全地把对称密钥发给服务器,之后双方用对称加密通信——这就是「混合密码系统」,又快又安全。

我做过的一个支付网关项目,流程就是这样的:

  1. 客户端生成一个随机的 AES 密钥(会话密钥)。
  2. 用服务器的 RSA 公钥加密这个 AES 密钥。
  3. 服务器用私钥解密得到 AES 密钥。
  4. 双方用这个 AES 密钥加密后续所有交易数据。

哈希函数也在里面保驾护航:每条消息都带 SHA-256 签名,确保没被篡改过。

核心记住:对称加密管效率,非对称加密管密钥分发,哈希函数管完整性验证。三者各司其职,缺一不可。

2.5 知识体系结构

下面这张图把三种密码算法的核心定位和协作关系画清楚了,自己对照着看看:

密码算法知识框架 密码算法知识框架 对称加密 AES / SM4 优点:速度快 弱点:密钥分发 用途:大数据加密 非对称加密 RSA / ECC / SM2 优点:解决密钥分发 弱点:速度慢 用途:密钥加密 / 数字签名 哈希函数 SHA-256 / SM3 优点:不可逆 弱点:碰撞风险 用途:完整性校验 混合 完整 混合密码系统工作流程 ① 客户端生成随机对称密钥(如 AES-256) ② 用服务器 RSA 公钥加密此对称密钥 ③ 服务器私钥解密 → 得到对称密钥 → 双方用对称加密通信 选型建议 大数据量 → 对称加密 密钥分发 → 非对称加密 完整性校验 → 哈希函数 三者协同使用,才是最佳实践

一个建议:你在做密码改造方案设计时,先用这张图理清楚「哪个环节该用哪种算法」。别上来就选 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 或国密办的最新标准。