📄 一句话概括
加密=把谁都能看懂的明文改造成没人认得的密文,加解密的开关是一把保密的密钥——方法可以公开,密钥绝不能泄露。
📝 本节和前面几节的关系
上一章网络把数据送到了对端,可路上要经过无数台设备——不想被人偷看,就得先把数据改头换面。本章学加密。
一、加密的三要素
明文:原本的内容,谁拿到都能看懂(汇款 1000 元); 密文:加工后的产物,认不出原文(一串无意义的字符); 密钥:加解密的开关——同一个明文配不同密钥出不同密文,只有握有密钥的人能还原。 三者的关系一句话:明文+密钥 → 密文;密文+密钥 → 明文。
二、保密的为什么是密钥而不是方法
加密算法早就是公开的学问,专家们把每种方法的底细摸得清清楚楚; 指望【方法保密】叫隐蔽式安全——算法一旦泄露全线崩盘,而算法很难永远不泄露; 所以现代加密的信条是:假设敌人连方法都知道,唯一的秘密就是密钥——换密钥比换方法容易得多。
三、加密在互联网里管什么
你在网页输入的密码,要路过多台路由器才到服务器——任何一跳都能被围观; 加密保证路上被截获的只有密文:偷到了也读不懂; 密码学完整体系(密钥交换、签名、证书)在 19 课有整章展开,本章抓住主干思想。
四、动手 Demo:明文、密钥、密文的第一次握手
用【异或】演示一次完整的加密—解密往返:同一把密钥,来时上锁、回时开锁。
msg = "汇款 1000 元"
key = 0x5A
data = msg.encode("utf-8")
cipher = [b ^ key for b in data]
print("密文:", " ".join("%02X" % b for b in cipher))
plain = bytes(b ^ key for b in cipher).decode("utf-8")
print("解出:", plain)
实跑输出:
--------------------------------------------------------------------
先来明确一下什么是加密
--------------------------------------------------------------------
明文不想让别人看懂, 就用一个【只有自己和对方知道的规则】把它改头换面:
明文: 汇款 1000 元
密钥: 异或 0x5A (只有收发双方知道)
密文: BC EB DD BC F6 E4 7A 6B 6A 6A 6A 7A BF DF D9
收到密文, 用同一个密钥再异或一次:
解出: 汇款 1000 元 <- 完璧归赵
角色 本例对应 要记住的一句话
-----------------------------------------------------
明文 汇款 1000 元 原本谁都能看懂的内容
密文 8F... 一串怪码 改头换面后没人认得的东西
密钥 异或 0x5A 加解密的开关, 必须保密
加密 + 解密 = 一来一回变回原样; 中间人只有密文没有密钥, 拦到了也白拦。
【⚠️ 2026 现状】真实系统不会用一次异或就上线(可被破解),
但【明文+密钥->密文, 密钥保密】这个骨架五十年没变过。
异或的妙处:a XOR k XOR k = a——同一把钥匙异或两次就回到原文,天然可逆。 真实系统不会只用一次异或(可被破解),但【明文+密钥→密文】这个骨架没变过。
30 秒实验
- 说出加密三要素各自的角色,并用【上锁/开锁】的比喻讲一遍加解密。
- 想一想:为什么说换密钥比换算法容易?(找一把新钥匙 vs 重新设计一把锁)
常见误区
- 以为加密靠方法保密——现代加密假设算法公开,秘密只有密钥。
- 以为加密只防偷看——防篡改、防冒充是签名与摘要的事,10.5 登场。
自测三问(点开对答案)
1. 加密三要素是什么? —— 明文、密文、密钥——密钥是加解密的开关。 2. 现代加密的信条? —— 假设算法公开,唯一的秘密是密钥。 3. 加密防的是什么? —— 防偷看(保密性);防篡改防冒充靠签名。- ☐ 下一节(10.2 错开字符编码的加密方式)
相关笔记
- 对计算机来说什么都是数字 — 字符即编号,加密对象由此而来
- 密码学的历史 — 五千年密码学编年史在那边
- 💻 计算机是怎样跑起来的 · 索引