加密算法基础:对称加密、非对称加密、哈希的选择与比较

说到加密算法,我见过不少新人一上来就纠结“哪个算法最安全”。其实说白了,没有完美的算法,只有合适的场景。今天咱们就把三种主流算法掰开揉碎,看看它们各自擅长什么,又该在什么场合用。

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

对称加密的原理很简单——加密和解密用同一个密钥。就像你用一把钥匙锁门,也用同一把钥匙开门。

我最常用的是AES,尤其是AES-256-GCM模式。为什么?因为它在安全性和性能之间平衡得最好。我在处理金融数据时用过AES-256-CBC,但后来发现GCM模式自带认证,省去了额外算MAC的步骤。

核心要点:对称加密速度快,适合大批量数据加密。密钥管理是最大痛点——你怎么把密钥安全地告诉对方?

常见的对称加密算法对比:

算法 密钥长度 分组大小 模式 我推荐的使用场景
AES 128/192/256位 128位 GCM、CBC、CTR 加密字段索引、文件加密
ChaCha20 256位 流加密 Poly1305 移动端、低性能设备
3DES 168位 64位 CBC 别用了,算力上已经不安全
SM4 128位 128位 CBC、GCM 国内合规场景
个人经验:我之前在日志加密中用AES-256-GCM,结果发现每次加密都要生成新的nonce。忘了保存nonce?那数据就彻底找不回来了。嗯,后来我在数据库里单独留了个nonce字段。

非对称加密:公钥私钥两把锁

非对称加密有两个密钥:公钥公开,私钥自己留着。别人用你的公钥加密,只有你能用私钥解密。

为什么需要这种方案?你想啊,对称加密的密钥怎么传给对方?要是密钥在半路被截了,整个加密就废了。非对称加密解决了这个问题——公钥随便传,私钥打死不给别人。

常见的非对称算法有:

  • RSA:经典算法,1024位以下已不安全,建议2048位以上。但算起来慢,特别是私钥操作。
  • ECC(椭圆曲线):密钥更短,性能更好。256位ECC相当于3072位RSA的安全强度。
  • SM2:国密标准,基于ECC,国内合规必须。
避坑:非对称加密的性能是对称加密的千分之一到万分之一。拿来加密大数据?你会后悔的。我见过有人用RSA加密100MB的文件……结果跑了2小时没跑完。

实际做法是:用非对称加密传输对称密钥,然后用对称密钥加密实际数据。这叫“混合加密”,TLS就是这么干的。

哈希算法:单向的指纹

哈希算法跟加密不一样。它不是用来“加密-解密”的,而是把任意长度的数据变成固定长度的摘要。而且这个过程不可逆——你没法从摘要反推原文。

我在日志搜索里哈希用得最多。比如你想查某个敏感字段的值,但又不想存明文,那就存它的哈希。搜索的时候,把关键词哈希一下,去匹配哈希值就行。

常用哈希算法:

  • SHA-256:目前最安全的通用哈希,输出256位。推荐用于大多数场景。
  • SHA-3:新一代标准,结构跟SHA-2完全不同。如果担心SHA-2有后门,可以用它。
  • SM3:国密哈希,输出256位。国内合规要求时用。
  • MD5/SHA-1:别碰了。MD5的碰撞攻击已经烂大街,SHA-1也在逐渐被淘汰。
重要提醒:哈希不是加密!你不能“解密”哈希。很多人说“密码加密存储”,其实应该是“密码加盐哈希存储”。

存储密码时,千万别只做一次SHA-256。要用bcrypt、scrypt或Argon2——这些是专门的密码哈希函数,故意设计得很慢,暴力破解成本高得吓人。

三种算法的对比

我整理了一份对比表,方便你快速决策:

特性 对称加密 非对称加密 哈希算法
密钥数量 1个 2个(公钥+私钥) 无密钥
是否有逆操作 是(可解密) 是(可解密) 否(不可逆)
性能 极快 极慢 较快
安全性基准 AES-256 ECC p-256 / RSA-3072 SHA-256
典型用途 数据加密、字段索引 密钥交换、数字签名 数据完整性、密码存储
密钥管理难度 高 低(公钥可公开) 无

怎么选?我的建议

这个问题没有标准答案,得看你的具体场景。我归纳了三条原则:

  1. 要加密还能解密?用对称加密。如果涉及密钥分发,结合非对称加密做密钥交换。
  2. 只要验证完整性?用哈希。先把原文哈希存好,用的时候重新算哈希对比就行。
  3. 要数字签名?用非对称加密的私钥签名,公钥验签。
口语一点:你想想看,在日志搜索的场景里,我们最常用的是对称加密(加密字段值)和哈希(快速匹配查询)。非对称加密基本只在建立安全连接时用一次。

我曾经接到过一个线上问题——某团队用RSA直接加密日志字段,导致插入性能从每秒5000掉到200。为什么不先用AES加密字段,再用RSA加密AES密钥呢?这就是典型的“选错算法”案例。

加密算法选择框架图 加密算法选择框架 你的数据安全需求 对称加密 加密字段索引 大数据量加/解密 非对称加密 密钥交换 数字签名 哈希算法 密码存储 数据完整性校验 实际工程:混合使用(如 TLS) 核心原则:对称加密用性能,非对称加密管密钥,哈希做完整性 日志搜索场景优先考虑对称加密和哈希

最后说一句:算法本身只是工具。真正的安全取决于你怎么用它。密钥管理、随机数生成、协议设计……哪一环出问题,算法再强也没用。嗯,这话题后面还会细聊。