教程
🛡️

网络安全

Web 安全、渗透测试、密码学与安全合规的系统化教程。

密码学基础:对称、非对称与哈希

理解密码学三大基石——对称加密、非对称加密、哈希函数的原理与用途,搞懂它们分别解决"保密、密钥分发、完整性"哪一类问题。

· 更新于 2026-07-20 阅读量 --

你在网上输密码、刷银行卡、连 Wi-Fi,背后都有密码学在默默保护:保证”只有该看的人能看""数据没被篡改""对方真是他本人”。但密码学常被妖魔化——有人觉得”加密就是加个密”,有人觉得”有 HTTPS 就万事大吉”。

这一篇我们拆开密码学的三大基石,搞清楚每种技术到底解决什么问题,不再混用。

先明确:密码学解决哪几件事

信息安全三目标(CIA):

  • 保密性(Confidentiality):内容不被不该看的人看到 → 靠加密
  • 完整性(Integrity):内容没被篡改 → 靠哈希/签名
  • 真实性(Authentication):对方真是他声称的人/来源 → 靠签名/证书

三大基石各管一摊:对称加密管保密、非对称加密管密钥分发与签名、哈希管完整性。下面逐个看。

基石一:对称加密(Symmetric)

对称加密就是加密和解密用同一把密钥(像一把锁的钥匙,锁门开门都用它)。代表算法:AES、DES(已淘汰)、3DES。

明文 + 密钥 ──加密──▶ 密文
密文 + 密钥 ──解密──▶ 明文

优点:,适合加密大量数据(如整个文件、数据库)。缺点:密钥分发难——你怎么把同一把密钥安全传给对方?如果通过网络发密钥,密钥被截获,加密就白费了。这就是”密钥分发问题”。

典型用途:加密本地文件、HTTPS 里真正传输数据用的就是对称密钥(会话密钥)。

基石二:非对称加密(Asymmetric)

非对称加密一对密钥公钥(公开)私钥(保密)。用公钥加密,只能用私钥解密;反过来,用私钥”签名”,公钥能验证签名来自私钥持有者。

代表算法:RSA、ECC(椭圆曲线,更短密钥更强)。

A 用 B 的公钥加密 ──▶ 密文 ──▶ B 用自己私钥解密

它完美解决了对称加密的”密钥分发难”:公钥随便公开,谁都能用它加密发给 B,只有 B 的私钥能解开。而且私钥还能做数字签名——B 用私钥对数据签名,任何人用 B 的公钥验证,确认”这数据确实是 B 发的且没被改”。

优点:解决密钥分发、能签名。缺点:,不适合加密大量数据。所以实战里它常和对称加密配合(下一节)。

基石三:哈希函数(Hash)

哈希不是加密,而是把任意长度输入”压缩”成固定长度的摘要(指纹)。代表:MD5(已破)、SHA-1(已破)、SHA-256、SHA-3。

"转账100元" ──SHA256──▶ 摘要(固定64位十六进制)

哈希的关键特性:

  • 单向:从摘要无法反推原文(所以叫”摘要”不是”密文”)。
  • 雪崩效应:原文改一个字,摘要天差地别。
  • 抗碰撞:很难找到两段不同原文得到相同摘要。

用途:验证完整性(下载文件后比对哈希看是否被篡改)、存密码(存哈希不存明文)、数字签名(对摘要签名而非对全文)。

三者怎么配合:一次安全通信

真实场景(如 HTTPS)是三者的合奏:

  1. 非对称加密解决”怎么安全交换密钥”:客户端用服务器公钥,加密一个对称会话密钥发过去。
  2. 对称加密接管后续:双方用这个会话密钥加密真正传输的大量数据(因为快)。
  3. 哈希保证完整:传输内容算摘要,任何篡改都会被察觉。
  4. 数字签名/证书证明”服务器公钥真是这家公司的”(防中间人冒充)。

这就是”用非对称安全地发对称密钥,再用对称加密干活”的经典组合——兼顾安全与性能。

常见认知误区

  • “哈希就是加密,能解密”:错。哈希单向不可逆,用来验证而非还原。把哈希当加密存密码,撞库时明文就暴露。
  • “对称比非对称安全/不安全”:安全性取决于密钥管理和算法强度,不是类型。两者用途不同,互补而非替代。
  • “MD5/SHA1 还能用”:已被攻破(可人为制造碰撞),新系统禁用,用 SHA-256 及以上。
  • “有 HTTPS 就绝对安全”:HTTPS 只保护传输过程,不防服务端本身漏洞、钓鱼网站、或证书被篡改。它不是万能盾。
  • “自己发明加密算法更牛”:大忌。密码学算法要经过全球多年攻防验证,自创算法几乎必破,用标准算法(AES/RSA/SHA-256)即可。

分组加密模式:同样的算法也有坑

对称加密(如 AES)不是”一把数据丢进去就完事”,还要选加密模式初始向量 IV

  • ECB(电子密码本):把明文分块独立加密。致命缺陷:相同的明文块加密后密文也相同,攻击者能从密文图案反推结构( famously,用 ECB 加密的 Linux 企鹅图,加密后还能看出轮廓)。绝对不要用 ECB
  • CBC(密码块链):每个明文块与前一个密文块异或再加密,链起来,相同明文也不再相同。需要随机 IV(IV 不用保密,但要随机且不可预测)。
  • GCM(伽罗瓦/计数器模式):现代首选,不仅加密还自带完整性校验(认证),能发现密文被篡改。AES-GCM 是当前行业标准。

经验:用 AES-256-GCM,别碰 ECB,CBC 也要配随机 IV。很多”加密了却被破解”的案例,问题不在算法,而在模式/IV/密钥管理。

随机数:密码学的”隐形地基”

密码学里大量环节依赖密码学安全的随机数(盐、IV、密钥、nonce 都靠它)。如果用普通伪随机(如 rand()、没播种好的 Math.random),攻击者可能预测出来,整个安全崩塌。

  • 盐、IV、密钥:必须用 CSPRNG(密码学安全伪随机数生成器),如 Node 的 crypto.randomBytes、Python 的 secrets 模块、Linux 的 /dev/urandom
  • 切勿用时间戳、自增 ID、可预测种子当随机源。

一句话:算法再强,随机数弱了也白搭。

密钥长度与算法选择速查

强度取决于”算法 + 密钥长度 + 实现正确”。当前(2026)务实建议:

用途推荐备注
对称加密AES-256-GCM128 位也够,256 更稳
非对称加密/签名RSA-2048 以上 或 ECC P-256ECC 更短更强更快
哈希SHA-256 / SHA-3禁用 MD5、SHA-1
口令哈希Argon2id / bcrypt见下篇
密钥交换ECDHE提供前向安全

**前向安全(Forward Secrecy)**值得记住:用临时密钥(ECDHE)协商,即使长期私钥日后泄露,历史通信记录也无法被解密——因为每次会话的对称密钥都不同且已丢弃。这是现代 TLS 的标配。

一个常见实现误区:自己拼密码学

新手最爱犯两类错:一是”用 base64 编码当加密”(base64 只是编码,谁都能解,不是加密);二是”自己 XOR/移位当加密”(几行代码秒破)。编码 ≠ 加密,混淆 ≠ 密码学。真正要用加密时,调用标准库的高层 API(如 Node crypto、Python cryptography),用 AES-GCM 这类经过审计的组合,别手写底层原语。

小测验:看看你掌握了没

  • 问题一:对称和非对称加密最大区别?答案:对称加解密同密钥(快、难分发),非对称用公钥+私钥对(解决分发、能签名、慢)。
  • 问题二:哈希能解密还原原文吗?答案:不能,哈希单向不可逆,用于完整性验证而非保密。
  • 问题三:HTTPS 为什么混用两种加密?答案:非对称安全交换对称会话密钥,对称加密后续大量数据,兼顾安全与性能。

这一篇你该记住的

  • 三大基石:对称加密(保密、快、密钥分发难)、非对称(密钥分发+签名、慢)、哈希(完整性、单向不可逆)。
  • 对称用 AES,非对称用 RSA/ECC,哈希用 SHA-256+,禁用 MD5/SHA1。
  • 哈希非加密、不可还原;用于校验、存密码、签名摘要。
  • 实战组合:非对称交换对称密钥 → 对称加密数据 → 哈希保完整 → 签名/证书证身份。
  • 误区:哈希≠加密、HTTPS 非万能、别自创算法。

下一篇我们深入最常用的”存密码”场景:哈希加盐与口令安全,搞清楚为什么”md5(密码)“是最危险的写法。