对称加密与非对称加密:基础概念、算法对比与应用场景
说到密码学,我总会想起刚入行那会儿的第一个项目——一个IM聊天工具。当时领导让我给消息加密,我毫不犹豫选了RSA,结果加密一条几十字的消息,界面卡了半秒。
后来我才明白:选错加密算法,比不加密还可怕。
这一章我们聊两个最基础的概念,也是你构建密钥边界必须跨过的坎——对称加密和非对称加密。
先看对称加密:简单但危险
对称加密,说白了就是用一个钥匙锁箱子,再用同一个钥匙开箱子。你和接收方手里有同一把密钥,用它加密数据,也用同一个密钥解密。
举个例子:
明文: "Hello, World!"
密钥: "my-secret-key-123"
算法: AES-256-GCM
密文: 0x3a1ba...(一堆看不懂的字节)
AES是目前最流行的对称算法。我个人习惯使用AES-256-GCM模式,因为它同时提供加密和完整性校验。
对称加密的优点是快。硬件加速下,AES能跑每秒几十GB。缺点也很明显——密钥分发是死穴。你想想看,如果我要给你发个加密文件,我怎么把密钥安全地告诉你?用快递寄U盘?还是微信发过去?
再看非对称加密:安全但不快
非对称加密用的是一对钥匙——公钥和私钥。公钥你可以公开贴在公司墙上,私钥你藏好别丢。别人用你的公钥加密数据,只有你的私钥能解开。
从来不用传递私钥——这就是非对称加密最漂亮的地方。
经典的算法是RSA和ECC。RSA基于大整数分解难题,ECC基于椭圆曲线离散对数。ECC在同等安全强度下,密钥更短、性能更好。
| 算法 | 密钥长度 | 安全强度(比AES) | 典型场景 |
|---|---|---|---|
| RSA | 2048 / 4096 bit | ~128 / ~256 bit | 数字签名、密钥交换 |
| ECC (P-256) | 256 bit | ~128 bit | 移动端、物联网 |
| SM2(国密) | 256 bit | ~128 bit | 国内合规场景 |
一张图看懂核心区别
我画了下面这张结构图,帮你把两个概念之间的关系理清楚。左半边是对称加密,右半边是非对称加密,中间做了对比。
怎么选?看场景
你可能会问:那我该用对称还是非对称?答案是:全都要。
真实世界里,大多数系统都使用混合加密:
- 用非对称加密(如DH或ECDH)协商一个临时对称密钥
- 用对称加密(AES)加密实际业务数据
- 散列或MAC保证完整性
典型的例子就是HTTPS/TLS。我第一次独立写证书校验逻辑时,翻了三天RFC才搞明白握手流程。嗯,那时候觉得非对称只用来交换一个密钥太重了,可后来才知道——非对称保护的是密钥本身的安全,对称保护的是数据的效率。
核心经验:
- 加密大批量数据 → AES
- 分发密钥或做数字签名 → RSA/ECC
- 既要效率又要安全 → 混合方案(如TLS 1.3)
常见的坑,我帮你踩过了
- 直接拿非对称加密数据体:RSA一次最多加密密钥长度对应的字节数(2048位只能加密245字节),加密大文件必出性能问题。
- 对称密钥硬编码在源码里:我曾经在一个开源库的配置文件里找到了某公司的AES密钥,公开在GitHub上……后来GitHub搜索不到那个库了。
- 忽略密钥生命周期:非对称密钥对要设置有效期,过期后必须轮转;对称密钥也要定期更换。别问我有多少项目从这里栽跟头。
- 混淆加密与签名:加密保证机密性,签名保证完整性和身份验证。两件事不能偷懒用一把钥匙。
总结一下今天的内容:对称加密快但密钥分发难,非对称加密安全但慢。两个结合起来,就是现代密码学的基础。你接下来要做的事情,就是理解这个“结合”的细节——我会在后面的章节里带你一步步拆解。