💻 第十章 试着加密数据吧
📄 一句话概括

加密=把谁都能看懂的明文改造成没人认得的密文,加解密的开关是一把保密的密钥——方法可以公开,密钥绝不能泄露。

📝 本节和前面几节的关系

上一章网络把数据送到了对端,可路上要经过无数台设备——不想被人偷看,就得先把数据改头换面。本章学加密。

一、加密的三要素

明文:原本的内容,谁拿到都能看懂(汇款 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 秒实验

  1. 说出加密三要素各自的角色,并用【上锁/开锁】的比喻讲一遍加解密。
  2. 想一想:为什么说换密钥比换算法容易?(找一把新钥匙 vs 重新设计一把锁)

常见误区

  1. 以为加密靠方法保密——现代加密假设算法公开,秘密只有密钥。
  2. 以为加密只防偷看——防篡改、防冒充是签名与摘要的事,10.5 登场。
自测三问(点开对答案) 1. 加密三要素是什么? —— 明文、密文、密钥——密钥是加解密的开关。 2. 现代加密的信条? —— 假设算法公开,唯一的秘密是密钥。 3. 加密防的是什么? —— 防偷看(保密性);防篡改防冒充靠签名。

相关笔记