1. 加密基础概念回顾:对称加密、非对称加密、哈希算法

说起加密,很多人第一反应就是「密钥」、「加密算法」这些词。但实际项目里,我发现很多同事对基础概念的理解还停留在「知道名字」的层面。尤其是部署后验证阶段,一旦加密功能出了问题,你不会分清楚是哪一层掉链子了。所以这一章,咱们先把底子打牢。

我个人的习惯是,不管多复杂的系统,都先从这三个最核心的加密概念入手:对称加密、非对称加密、哈希算法。它们各有各的脾气,也各有各的坑。下面咱们一个一个捋。

加密基础概念三层结构 对称加密 AES / DES / SM4 非对称加密 RSA / ECC / SM2 哈希算法 SHA-256 / SM3 加解密密钥相同 速度快,适合大量数据 密钥分发是难点 公钥加密,私钥解密 速度慢,适合小数据 解决密钥分发问题 单向不可逆 固定长度输出 用于完整性校验 实际系统常混合使用:对称加密传输数据,非对称交换密钥,哈希校验完整性

1.1 对称加密

对称加密,说白了就是一把钥匙开一把锁。加密和解密用同一个密钥。你想想看,给文件加个密码,解压时还要输入同一个密码——就是这个原理。

常见的对称算法有:

  • AES(高级加密标准):目前最主流,密钥长度128/192/256位。我在项目中用得最多的是AES-256-GCM,自带认证模式,省掉了单独做HMAC的麻烦。
  • DES:老古董了,密钥56位,已经不安全。偶尔在遗留系统里见过,但千万别在新系统里用。
  • SM4:国密标准,国内项目必须支持的算法。我记得有一次对接政务云,对方明确要求只能用SM4,不然过不了等保。
关键指标: 对称加密的速度通常比非对称快1000倍以上。但弱点也很明显——密钥怎么安全地传给对方?这就是下一个算法要解决的问题。

1.2 非对称加密

非对称加密的核心思想是:公钥公开,私钥自己藏好。别人用你的公钥加密数据,只有你能用私钥解开。反之,你也可以用私钥签名,别人用公钥验证签名。

我刚开始做加密时,总觉得非对称加密「更安全」。后来踩了坑才发现——它只是解决了密钥分发问题,但性能是真的慢。一次RSA-2048解密大概需要几毫秒,而AES-256解密只要几微秒。所以实际场景中,非对称加密只用来做两件事:

  1. 加密对称密钥(密钥交换)
  2. 数字签名(身份认证与不可否认性)

常见的非对称算法:

算法密钥长度用途注意
RSA2048/3072/4096加密、签名1024位已不安全,别用
ECC(椭圆曲线)256位(相当于RSA-3072)签名、密钥交换性能好,密钥短,但我见过很多库的曲线参数没配对的坑
SM2256位签名、密钥交换国密标准,注意椭圆曲线参数为国密特定
避坑提醒: 我曾经在一个项目中用了RSA-1024做签名,结果被安全审计直接打回。现在行业最低要求是RSA-2048或ECC P-256。另外,非对称加密不能直接加密大块数据(比如超过密钥长度的文件),必须先用对称密钥加密数据,再用非对称加密保护那个对称密钥——这就是混合加密。

1.3 哈希算法

哈希算法的最大特点:单向。你可以从输入计算出固定长度的摘要,但没法从摘要反推原始数据。它不叫「加密」,因为加密是可逆的,哈希不可逆。

我经常举一个例子:你下载一个ISO镜像,网站会提供一个SHA-256校验值。下载完后你本地算一遍,如果两个值一样,说明文件没被篡改。这就是哈希的典型用途——完整性校验。

哈希算法还有两个重要应用:

  • 密码存储:不存明文,只存哈希。但注意,单纯哈希不够安全(彩虹表攻击),一般要加盐(salt)并迭代多次(比如bcrypt、scrypt、Argon2)。
  • 消息认证码(HMAC):用密钥对消息做哈希,保证消息未被篡改且来源可信。

常见哈希算法:

算法输出长度安全性备注
MD5128位已破解,碰撞攻击容易一定不要用!我见过有旧系统还在用MD5做签名,被攻击只是时间问题
SHA-1160位理论上已不安全Google在2017年实现了SHA-1碰撞,现在停止使用
SHA-256256位目前安全最推荐,广泛使用
SM3256位国密标准,安全国内合规场景必须用
小技巧: 部署后验证哈希功能,千万别只测算法是否输出固定长度。我在项目里遇到过一种情况:代码里用了SHA-256,但底层库在特定平台(比如ARM)上实现有bug,同样的输入在不同机器上算出不同的值。所以一定要做一个「已知输入-已知输出」的验证用例。

1.4 三者的关系与混合使用

实际系统中,很少只靠一种加密手段。你看TLS握手的过程就知道:

  1. 客户端用非对称加密(RSA或ECDHE)协商出一个临时对称密钥。
  2. 后续大量数据用对称加密(AES)传输。
  3. 每条消息附带一个HMAC(基于哈希)确保完整性。

我在做物联网项目时,设备端资源有限,只能跑对称加密。但密钥怎么分发?我们就用非对称加密做一个「安全通道」,把对称密钥下发到设备。而设备上报的数据,会附上SM3哈希值,服务端校验后才知道数据有没有被中间人篡改。你看,三个东西配合起来才完整。

总结: 对称加密保机密性、非对称加密保密钥分发与身份、哈希算法保完整性。三者缺一不可。验证部署后的加密功能,你得先搞清楚每个环节用的是哪类算法、密钥怎么存、校验逻辑怎么写。后面章节会逐一拆解每个验证点。