数据加密基础概念
做数据迁移和TLS适配,逃不开加密这个坎。 我刚开始接触这块时,觉得加密不就是把数据弄乱吗? 后来踩了几次坑才明白——选错算法、配错密钥、忽略哈希校验,都可能让整个迁移项目翻车。 这一章咱们先把地基打牢:对称加密、非对称加密、哈希算法和数字签名。 把这些概念理清,后面聊TLS时你才不会发懵。
对称加密:一把钥匙开一把锁
说白了,对称加密就是加密和解密用同一个密钥。 你想想看,就像你家的门锁,用一把钥匙锁上,也用同一把钥匙打开。 速度快,适合大批量数据,但难点在密钥怎么安全地传给对方。
我在项目中遇到过不少团队直接把密钥写在配置文件里,然后传到Git上…… 嗯,那基本等于把家门钥匙贴在门外。 常见的对称算法有这些:
| 算法 | 密钥长度 | 安全性 | 典型场景 |
|---|---|---|---|
| AES | 128 / 192 / 256 位 | 高(推荐) | 文件加密、数据库加密 |
| DES | 56 位 | 已淘汰 | —— |
| 3DES | 112 / 168 位 | 较低,不推荐 | 老旧系统兼容 |
非对称加密:公钥私钥各一把
对称加密最大麻烦是密钥分发。 非对称加密就解决了这个问题——公钥公开,私钥自己藏好。 公钥加密的数据,只有私钥能解;反过来,私钥签名,公钥能验证。 但代价是速度慢,不适合加密大文件。
我曾经接手一个跨机房数据同步项目,对方坚持用 RSA-1024。 结果加密 1MB 的数据要几十秒……后来换成 ECC 曲线才勉强跑通。 所以你看——性能评估不能省。
| 特性 | 对称加密 | 非对称加密 |
|---|---|---|
| 密钥数量 | 1 个共享密钥 | 一对密钥(公钥+私钥) |
| 速度 | 快(硬件加速) | 慢(数学运算多) |
| 主要用途 | 数据加密 | 密钥交换、数字签名 |
| 典型算法 | AES, SM4 | RSA, ECC, SM2 |
哈希算法:不可逆的指纹
哈希不是加密——它没有解密过程。 输入任意长度数据,输出固定长度的摘要,而且不能反推原文。 这就好比给文件打一个指纹,换一个字符指纹就全变了。
典型的应用是完整性校验:下载文件后对比 SHA-256 值,看是否被篡改。 还有密码存储:存哈希值,不存明文。 但注意——MD5 和 SHA-1 已经不安全了,别再用了。
哈希也分为普通哈希和带密钥的哈希(HMAC)。 HMAC 需要双方共享一个密钥,能同时验证完整性和身份。 后面讲 TLS 时会提到。
数字签名:哈希 + 非对称 = 可信
你想想,怎么证明一条消息是你发的,而且中途没被人改过? 数字签名就是这么干的:
- 发送方先对消息做哈希,得到摘要。
- 用自己的私钥加密这个摘要,生成签名。
- 接收方用发送方的公钥解密签名,得到摘要A。
- 再对消息做哈希,得到摘要B。对比两者是否一致。
一致就说明:消息是私钥持有者发的(身份认证),而且没被改(完整性)。 这个机制是 TLS 证书 的核心。 如果你看不懂证书链的验证流程,先把这个原理搞透。
# 生成签名
openssl dgst -sha256 -sign private.pem -out file.sig file.txt
# 验证签名
openssl dgst -sha256 -verify public.pem -signature file.sig file.txt
注意:-verify 用的是公钥文件,不是私钥。
把这张图记在脑子里:
· 对称加密 → 快,但密钥分发难
· 非对称加密 → 慢,但解决了密钥分发
· 哈希 → 完整性验证,不可逆
· 数字签名 → 哈希 + 非对称,实现认证+完整
后面讲 TLS 握手、证书链、密钥迁移时,你会反复回来参考这四块内容。