一、密码学基础:对称加密与非对称加密、哈希函数、数字签名概念

各位同学,咱们今天聊密码学基础。说实话,这章是整个课程的基石。你后面要理解签名验签、数据完整性保护,都得先把这几个概念吃透。

我刚开始接触密码学时,总觉得这东西离业务很远。直到有一次做支付接口对接,对方要求对报文做签名,我才发现——嗯,不懂这些,连接口都调不通。从那以后,我再也不敢小看密码学了。

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

对称加密,说白了就是加密和解密用同一把密钥。你想想看,就像你家大门钥匙——锁门用它,开门也用它。

常见的对称加密算法有:

算法 密钥长度 特点
AES 128/192/256 bit 目前最主流,安全高效
DES 56 bit 已淘汰,密钥太短
3DES 112/168 bit 过渡方案,性能差
SM4 128 bit 国密标准,国内常用

对称加密最大的优势是快。我在项目中做过压测,AES-256 加密 1MB 数据,耗时不到 1 毫秒。但问题也明显——密钥怎么安全地传给对方?

⚠ 注意: 对称加密的密钥分发是老大难。如果你通过网络直接传密钥,那加密就失去了意义。我曾经见过一个项目,开发人员把 AES 密钥硬编码在配置文件里,结果代码泄露,整个数据库被脱裤。

1.2 非对称加密:公钥私钥,各司其职

非对称加密解决了密钥分发问题。它有一对密钥:公钥公开,私钥保密。公钥加密的数据只能用私钥解密,反过来私钥加密的数据只能用公钥解密。

为什么会这样?因为它是基于数学难题设计的。比如 RSA 依赖大整数分解,ECC 依赖椭圆曲线离散对数。你想想看,两个大素数相乘很容易,但要把乘积分解回两个素数——难得很。

常见的非对称加密算法:

  • RSA:最经典,1024/2048/4096 bit,2048 位以上才安全
  • ECC:椭圆曲线,256 bit 相当于 RSA 3072 bit,性能更好
  • SM2:国密椭圆曲线算法,国内政企项目必备

我个人习惯,能用 ECC 就不用 RSA。原因很简单——同样安全等级下,ECC 的密钥更短,计算更快。我在一个 IoT 项目里用 ECC 做设备身份认证,密钥对只有 32 字节,设备端存储毫无压力。

💡 小技巧: 实际项目中,很少直接用非对称加密加密大量数据。因为非对称加密慢,比对称加密慢几百倍。通常的做法是:用非对称加密传输对称密钥,再用对称密钥加密业务数据。这叫「混合加密」,HTTPS 就是这么干的。

1.3 哈希函数:数据的指纹

哈希函数,也叫散列函数。它能把任意长度的数据,压缩成固定长度的摘要。而且这个摘要是唯一的——哪怕原文只改一个比特,摘要都会完全不一样。

哈希函数有几个核心特性:

  1. 单向性:从摘要反推原文,理论上不可能
  2. 抗碰撞性:很难找到两个不同数据有相同摘要
  3. 固定输出:不管输入多大,输出长度固定

常用的哈希算法:

算法 输出长度 安全性
MD5 128 bit 已破解,不要用
SHA-1 160 bit 已发现碰撞,不推荐
SHA-256 256 bit 目前安全,推荐使用
SM3 256 bit 国密标准,国内推荐

哈希函数在数据完整性保护中至关重要。你下载一个文件,网站会提供 SHA-256 值。你本地算一遍,对比一下——如果一致,说明文件没被篡改。这就是哈希的典型应用。

🔑 核心要点: 哈希不是加密!加密可以解密,哈希不能还原。很多新手把哈希当加密用,存储密码时只存哈希值——这是对的,但别搞混概念。

1.4 数字签名:电子世界的盖章

数字签名,说白了就是电子版的签名盖章。它解决三个问题:

  • 身份认证:确认是谁签的
  • 不可否认:签了就不能赖账
  • 完整性:签名后数据没被改过

数字签名的流程是这样的:

  1. 发送方对数据做哈希,得到摘要
  2. 用私钥加密摘要,生成签名
  3. 把数据和签名一起发给接收方
  4. 接收方用公钥解密签名,得到摘要 A
  5. 接收方对数据做哈希,得到摘要 B
  6. 对比 A 和 B,一致则签名验证通过

你看,这里用到了哈希函数(生成摘要)和非对称加密(加密/解密摘要)。所以我说,前面三个概念是数字签名的基础。

⚠ 避坑指南: 我曾经遇到一个项目,开发人员直接用私钥加密整个数据文件当签名。结果文件太大,加密慢得要命,而且公钥解密后还要对比原文——完全搞反了。记住,数字签名是对哈希值签名,不是对原文签名。

1.5 知识体系总览

下面这张图,把本章的核心概念串起来了。你多看几遍,后面章节都会用到。

密码学基础概念关系图 密码学基础概念关系图 对称加密 AES / SM4 / DES 非对称加密 RSA / ECC / SM2 哈希函数 SHA-256 / SM3 数字签名 身份认证 + 不可否认 + 完整性 密钥管理 加密/解密摘要 生成摘要 💡 核心逻辑 数字签名 = 哈希函数(生成摘要)+ 非对称加密(加密摘要) 对称加密用于加密大量数据,非对称加密用于密钥交换和数字签名

1.6 本章小结

这一章我们讲了四个核心概念:

  • 对称加密:快,但密钥分发难
  • 非对称加密:解决了密钥分发,但慢
  • 哈希函数:数据指纹,不可逆
  • 数字签名:哈希 + 非对称加密的组合应用

这些概念你记住了,后面讲签名验签的具体实现时,就不会觉得陌生。我个人建议,你可以在本地装个 OpenSSL,亲手试试 AES 加密、RSA 密钥生成、SHA-256 哈希计算。光看不动手,永远记不牢。

🔧 动手练习: 用 OpenSSL 生成一对 RSA 2048 位密钥,然后用私钥对一段文本签名,再用公钥验证签名。命令就三行,网上搜一下就有。做完这个练习,你对数字签名的理解会上一个台阶。