数据加密基础概念

做数据迁移和TLS适配,逃不开加密这个坎。 我刚开始接触这块时,觉得加密不就是把数据弄乱吗? 后来踩了几次坑才明白——选错算法、配错密钥、忽略哈希校验,都可能让整个迁移项目翻车。 这一章咱们先把地基打牢:对称加密、非对称加密、哈希算法和数字签名。 把这些概念理清,后面聊TLS时你才不会发懵。

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

说白了,对称加密就是加密和解密用同一个密钥。 你想想看,就像你家的门锁,用一把钥匙锁上,也用同一把钥匙打开。 速度快,适合大批量数据,但难点在密钥怎么安全地传给对方。

我在项目中遇到过不少团队直接把密钥写在配置文件里,然后传到Git上…… 嗯,那基本等于把家门钥匙贴在门外。 常见的对称算法有这些:

算法密钥长度安全性典型场景
AES128 / 192 / 256 位高(推荐)文件加密、数据库加密
DES56 位已淘汰——
3DES112 / 168 位较低,不推荐老旧系统兼容
我个人习惯:只要硬件支持,优先用 AES-256-GCM。 性能好、有认证加密,能防篡改。 存量数据迁移时,若原系统用3DES,建议先做算法升级再迁移。

非对称加密:公钥私钥各一把

对称加密最大麻烦是密钥分发。 非对称加密就解决了这个问题——公钥公开,私钥自己藏好。 公钥加密的数据,只有私钥能解;反过来,私钥签名,公钥能验证。 但代价是速度慢,不适合加密大文件。

我曾经接手一个跨机房数据同步项目,对方坚持用 RSA-1024。 结果加密 1MB 的数据要几十秒……后来换成 ECC 曲线才勉强跑通。 所以你看——性能评估不能省。

特性对称加密非对称加密
密钥数量1 个共享密钥一对密钥(公钥+私钥)
速度快(硬件加速)慢(数学运算多)
主要用途数据加密密钥交换、数字签名
典型算法AES, SM4RSA, ECC, SM2
在实际的 TLS 握手过程中,非对称加密只用来交换对称密钥(也叫会话密钥), 后续的传输数据仍然由对称加密搞定。 两者互补,不是二选一。

哈希算法:不可逆的指纹

哈希不是加密——它没有解密过程。 输入任意长度数据,输出固定长度的摘要,而且不能反推原文。 这就好比给文件打一个指纹,换一个字符指纹就全变了。

典型的应用是完整性校验:下载文件后对比 SHA-256 值,看是否被篡改。 还有密码存储:存哈希值,不存明文。 但注意——MD5 和 SHA-1 已经不安全了,别再用了。

我曾经踩过一个坑:用 MD5 做文件签名校验,结果攻击者构造了碰撞文件。 幸好只是内部测试环境,没造成损失。 从那以后,我但凡涉及安全场景,一律用 SHA-256 或更高。

哈希也分为普通哈希和带密钥的哈希(HMAC)。 HMAC 需要双方共享一个密钥,能同时验证完整性和身份。 后面讲 TLS 时会提到。

数字签名:哈希 + 非对称 = 可信

你想想,怎么证明一条消息是你发的,而且中途没被人改过? 数字签名就是这么干的:

  1. 发送方先对消息做哈希,得到摘要。
  2. 用自己的私钥加密这个摘要,生成签名。
  3. 接收方用发送方的公钥解密签名,得到摘要A。
  4. 再对消息做哈希,得到摘要B。对比两者是否一致。

一致就说明:消息是私钥持有者发的(身份认证),而且没被改(完整性)。 这个机制是 TLS 证书 的核心。 如果你看不懂证书链的验证流程,先把这个原理搞透。

举个例子,OpenSSL 命令行签名:
# 生成签名
openssl dgst -sha256 -sign private.pem -out file.sig file.txt

# 验证签名
openssl dgst -sha256 -verify public.pem -signature file.sig file.txt
注意:-verify 用的是公钥文件,不是私钥。
加密基础概念知识体系 加密基础概念知识体系 数据加密基础 对称加密 AES / SM4 / 3DES 非对称加密 RSA / ECC / SM2 哈希算法 SHA-256 / MD5(不安全) 数字签名 哈希 + 非对称加密 数字签名 = 哈希摘要 + 私钥加密 公钥验证,确保完整性与来源

把这张图记在脑子里:
· 对称加密 → 快,但密钥分发难
· 非对称加密 → 慢,但解决了密钥分发
· 哈希 → 完整性验证,不可逆
· 数字签名 → 哈希 + 非对称,实现认证+完整

后面讲 TLS 握手、证书链、密钥迁移时,你会反复回来参考这四块内容。