跳到主要内容

3.4 加密与解密

知识点​

1.为什么需要加密​

问题:数据在网络中传输、在设备中存储,随时可能被窃听、截获、篡改。仅靠"不让别人接触"(物理隔离)无法应对互联网环境。

解决思路:把可读的信息变成不可读的乱码,即使被截获也看不懂——这就是加密。

加密要解决的四个安全问题(与必修2 呼应):

需求加密如何满足
保密性加密后即使被截获也看不懂
完整性用哈希校验内容是否被改动
身份真实性用数字签名/证书证明"是谁发的"
不可否认性数字签名后发送方无法抵赖

2.基本术语(必背)​

术语含义
明文(Plaintext)加密前的原始信息,人可直接读懂
密文(Ciphertext)加密后的信息,人无法直接读懂
加密(Encryption)明文 → 密文 的变换过程
解密(Decryption)密文 → 明文 的还原过程
密钥(Key)加解密时使用的关键参数,决定变换的具体方式
密码算法(Cipher)加解密所依据的规则/方法

最重要的一个观念(柯克霍夫原则):算法的安全性应当只依赖于密钥的保密,而不依赖于算法的保密。

通俗理解:锁的构造公开没问题,只要钥匙不丢就安全。所以"自己发明的保密算法"通常不如公开检验过的标准算法可靠。

密钥空间:密钥所有可能取值的个数。密钥越长,暴力破解需要的尝试次数越多(呈指数级增长)。

3.古典加密方法​

(1)凯撒密码(移位密码)​

原理:把每个字母在字母表中向后移动固定的位数(凯撒用的是 3 位)。

明文:A B C D E F …… X Y Z
密文:D E F G H I …… A B C (每个字母后移 3 位)

示例:HELLO → KHOOR

解密:向前移动同样的位数(KHOOR → HELLO)。

密钥:移动的位数(这里是 3)。密钥空间很小(只有 25 种可能),很容易被穷举破解。

Python 实现:

# 3-1 凯撒密码加密(只处理小写字母,密钥 k)
def caesar_encrypt(text, k):
result = ""
for ch in text:
if "a" <= ch <= "z":
# ord 取字符编码,chr 由编码还原字符
result += chr((ord(ch) - ord("a") + k) % 26 + ord("a"))
else:
result += ch # 非字母原样保留
return result

print(caesar_encrypt("hello", 3)) # khoor

关键技巧:(x + k) % 26 实现"绕回"——z 后面接 a,靠取余完成。

两个必备函数(考点):

函数作用示例
ord(ch)字符 → 编码值ord("A") → 65
chr(n)编码值 → 字符chr(65) → "A"

记忆:ord 是 "order"(序号),chr 是 "character"(字符)。

(2)替换密码​

原理:按一张替换表,把每个字符换成表中对应的另一个字符(不一定是移位)。

示例表:a→q, b→w, c→e, d→r, e→t …(键盘序列)

优点:比凯撒密码的密钥空间大得多; 缺点:仍保留了字母出现的频率特征,可用频率分析法破解(英文中 e 出现最多,密文中最高频的字母很可能就是 e)。

(3)古典密码的共同弱点​

  1. 加密单位小(一个字母一个字母换),模式可被统计分析;
  2. 密钥空间有限,易被穷举;
  3. 不适合现代大数据量加密。

因此现代加密都以"比特块"为单位,并用复杂的数学运算。

4.现代加密:对称与非对称(本小节核心对比)​

(1)对称加密(单钥加密)​

原理:加密与解密使用同一把密钥。

明文 --[密钥K加密]--> 密文 --[密钥K解密]--> 明文
项目内容
代表算法DES(数据加密标准,56 位密钥,已不安全)、3DES、AES(高级加密标准,128/192/256 位,现行主流)
优点算法简单、加解密速度快,适合大量数据加密
缺点密钥分发困难——双方必须事先安全地共享同一把密钥;密钥数量随用户数平方增长(n 人互通用 n(n-1)/2 把钥匙);无法实现不可否认(双方都有同一把钥匙,谁都能伪造)
典型应用文件加密、磁盘加密、HTTPS 中加密实际传输的数据

密钥数量公式(易考):n 个人两两通信,需要 n(n-1)/2 把密钥。10 个人需要 45 把。

(2)非对称加密(公钥加密)​

原理:一对密钥——公钥(Public Key) 与 私钥(Private Key),成对生成:

  • 公钥公开,谁都可以拿;
  • 私钥自己保管,绝不外传;
  • 公钥加密的数据,只有对应私钥能解;私钥加密(签名)的数据,用公钥能验证。
项目内容
代表算法RSA(最经典)、ECC(椭圆曲线)
优点解决了密钥分发问题(公钥可公开传递);可实现数字签名(不可否认)
缺点运算复杂、速度慢(比对称加密慢数百倍以上),不适合加密大数据
典型应用密钥交换、数字签名、数字证书、小数据量加密

两种方向的用法(必须分清):

目的用哪把钥匙加密用哪把钥匙解密
让别人安全发消息给我对方用我的公钥加密我用自己的私钥解密
证明消息是我发的(签名)我用自己的私钥加密(签名)任何人用我的公钥验证

记忆口诀:"公钥加密、私钥解密;私钥签名、公钥验证"。

(3)对称与非对称对比表​

对比项对称加密非对称加密
密钥数量1 把(共用)1 对(公钥 + 私钥)
加解密速度快慢
密钥分发困难(要先安全传钥匙)容易(公钥可公开)
能否签名不能能
适用数据量大量数据少量数据(密钥、摘要)
代表算法DES、AESRSA、ECC

实际系统的做法(混合加密,重要):用非对称加密安全地传一把"会话密钥",再用这把对称密钥加密真正的大量数据——兼得"安全"与"快"。这正是 HTTPS 的做法。

5.哈希(散列)函数​

定义:把任意长度的数据映射为固定长度的摘要(如 MD5 得到 128 位/16 字节,SHA-1 得到 160 位)。

三个特性:

  1. 单向不可逆——由摘要无法还原原文(所以叫"单向加密",严格说不是加密);
  2. 雪崩效应——原文改动一个字符,摘要面目全非;
  3. 抗碰撞——很难找到两段不同数据产生相同摘要(MD5/SHA-1 已被证明可构造碰撞,现推荐 SHA-256)。

典型用途:

用途说明
完整性校验下载文件后比对摘要,判断是否被篡改
口令存储数据库只存口令的哈希值,不存明文;登录时比对哈希
数字签名先对内容求摘要,再对摘要签名(因为摘要短,签名快)

为什么口令要加"盐"(salt):直接哈希的简单口令容易被"彩虹表"反查,加一段随机串再哈希可大幅提高破解成本。

考点提醒:MD5 常用 32 位十六进制字符串表示(128 位 = 16 字节 = 32 个十六进制位)。

6.数字签名与数字证书​

(1)数字签名​

作用:证明消息确实由某人发出且内容未被篡改,并实现不可否认。

过程(五步):

① 发送方对原文计算摘要(哈希)
② 发送方用自己的【私钥】加密该摘要 → 得到"签名"
③ 签名随原文一起发送
④ 接收方用发送方的【公钥】解密签名,得到摘要1
⑤ 接收方自己计算原文的摘要2,比较摘要1 与 摘要2
相同 → 未被篡改且确实是对方发的;不同 → 内容被改或签名伪造

要点:签名用的是私钥,验证用的是公钥;签名的是摘要,不是原文(效率考虑)。

(2)数字证书​

要解决的问题:公钥怎么证明"真的是他的"?攻击者可以伪造一对密钥并冒充"某银行"发布公钥。

数字证书:由权威的第三方机构 CA(Certificate Authority,认证中心) 签发的电子凭证,把"公钥 + 持有者身份信息"绑定在一起,并用 CA 的私钥签名。

验证链:浏览器内置了受信任的根证书,用它验证网站的证书签名 → 确认公钥可信 → 再建立加密连接。

生活类比:数字证书 ≈ 身份证 + 派出所的公章;CA ≈ 派出所。

7.HTTPS 的工作过程(综合应用,常考流程题)​

① 客户端向服务器发起 HTTPS 请求
② 服务器返回【数字证书】(内含公钥,由 CA 签名)
③ 客户端验证证书(用内置根证书验证签名、检查域名与有效期)
④ 客户端生成一个随机的【会话密钥】,用服务器的【公钥】加密后发给服务器
⑤ 服务器用自己的【私钥】解密,双方得到同一个会话密钥
⑥ 之后所有数据都用这把【对称会话密钥】加密传输

为什么这样设计:非对称加密解决"密钥怎么安全地给",对称加密解决"数据怎么快速地加密"——混合加密的经典范例。

浏览器地址栏的"小锁" 就表示:证书验证通过 + 连接已加密。

8.异或加密(简单而重要的思想)​

异或运算(XOR,符号 ^)的性质:

性质说明
相同为 0,不同为 10^0=0、1^1=0、1^0=1、0^1=1
自反性a ^ b ^ b = a —— 用同一个密钥异或两次就还原

因此异或可以同时用于加密和解密:

# 3-2 异或加密(对字符编码逐位异或)
def xor_cipher(text, key):
result = ""
for ch in text:
result += chr(ord(ch) ^ key) # 加密
return result

c = xor_cipher("hello", 7)
print(c) # 一串乱码字符
print(xor_cipher(c, 7)) # hello ← 再异或一次就还原

要点:同一个函数既是加密也是解密;密钥就是那个整数。

缺点:如果密钥是单字节,很容易被频率分析破解,实际使用需用足够长且随机的密钥流(如一次性密码本)。

9.综合对比:加密、哈希、编码(极易混)​

项目目的能否还原有无密钥例子
加密保密(不让别人看懂)能(有密钥即可解密)有AES、RSA、凯撒密码
哈希校验完整性/存口令不能(单向)一般无MD5、SHA-256
编码格式转换(便于传输/存储)能(按规则直接还原)无ASCII、UTF-8、Base64、URL 编码

关键结论:Base64 不是加密! 它只是"把二进制转成可打印字符"的编码,任何人都能解开。"编码不等于加密"是高频判断题。

10.易错点清单​

序号错误认识正确理解
1"加密算法要保密才安全"算法可公开,密钥必须保密
2"公钥和私钥都能随便公开"只有公钥可公开,私钥绝不可外传
3"用公钥签名"签名用私钥,验证用公钥
4"非对称加密比对称加密快"恰恰相反,非对称慢得多
5"哈希就是加密,可以解密"哈希单向不可逆,不能"解密"
6"MD5 是加密算法"是哈希(摘要)算法,不可逆
7"Base64 是加密"是编码,无密钥,可逆
8"凯撒密码很安全"密钥空间仅 25 种,可穷举
9"口令直接存明文最方便"必须存哈希值(最好加盐)
10"HTTPS 全程用非对称加密"只有协商密钥用非对称,数据用对称
11忘记 % 26 导致越界移位必须取余,才能绕回
12ord 与 chr 用反ord 字→码,chr 码→字

11.速查表​

序号考点结论
1六个基本术语明文、密文、加密、解密、密钥、密码算法
2安全性的关键密钥保密,算法可公开
3凯撒密码位移3 位
4凯撒密码的弱点密钥空间小,可穷举
5替换密码的弱点可用频率分析破解
6ord("A")65
7chr(65)"A"
8移位绕回的做法(x + k) % 26
9对称加密代表DES、AES
10对称加密优点速度快,适合大数据
11对称加密缺点密钥分发难、不能签名
12非对称加密代表RSA
13非对称加密优点解决密钥分发、可签名
14非对称加密缺点速度慢
15公钥用途加密(别人发给我)、验证签名
16私钥用途解密(我收信)、签名(我发信)
17口诀公钥加密私钥解密,私钥签名公钥验证
18n 人两两通信需要的对称密钥数n(n-1)/2
19MD5 摘要长度128 位 = 16 字节 = 32 位十六进制
20哈希三特性单向、雪崩效应、抗碰撞
21哈希的用途完整性校验、口令存储、数字签名
22数字签名签的是什么原文的摘要
23数字证书由谁签发CA(认证中心)
24证书绑定了什么公钥 + 身份信息
25HTTPS 实际数据用什么加密对称加密(会话密钥)
26异或的性质a ^ b ^ b = a(自反)
27混合加密的目的非对称传密钥 + 对称传数据
28Base64是编码,不是加密

12.课堂提示(讲课参考)​

  • 先玩"凯撒密码"再讲原理:让学生用后移 3 位互相传小纸条,5 分钟就理解"明文—密文—密钥"。
  • ord 与 chr 现场演示:ord("a") 得 97、chr(98) 得 b,学生就能自己写移位公式。
  • 对称加密的密钥个数用"握手"活动体会:10 个同学两两通信要 45 把钥匙,全班 50 人就 1225 把——非对称加密的必要性一下就出来了。
  • 哈希用"剁馅"比喻:肉能剁成馅,馅不能还原成肉;馅的味道能验证是不是同一块肉——单向 + 校验两个特性一次讲完。
  • HTTPS 用"寄保险箱"的故事串一遍:网站先把"开着锁的保险箱(公钥)"寄给你,你把"会话密钥"锁进去寄回,之后双方用小钥匙快速通信。
  • 务必强调"Base64 不是加密",这是判断题和选择题的固定陷阱。