密码学实验:凯撒密码
一、实验目的
- 掌握凯撒密码的数学原理:理解字符移位与模运算的结合,实现加解密算法。
- 理解暴力破解本质:通过穷举有限密钥空间,掌握利用语言特征破解密文的方法。
- 编程实践:用Python实现加解密逻辑与暴力破解脚本,提升密码学编程能力。
二、凯撒密码核心原理
2.1 字符置换
无移位置换表:
小写 a b c d e f g h i j k l m 大写 A B C D E F G H I J K L M 小写 n o p q r s t u v w x y z 大写 N O P Q R S T U V W X Y Z 移位加密示例(k=5):
每个字母向前推移5位,如a→F
,b→G
,明文data
加密为IFYF
。
2.2 数学模型:用公式定义加密逻辑
- 字母数字化:将26个字母映射为0-25的整数(如
a=0
,b=1
,z=25
)。 - 加密公式:
[ c = (m + k) \mod 26 ]
(m
:明文数字,c
:密文数字,k
:密钥,模26确保结果在字母表范围内) - 解密公式:
[ m = (c - k) \mod 26 ]
示例:
- 明文
data
对应数字序列:3, 0, 19, 0
- 密钥
k=5
时,密文序列:(3+5)%26=8
,(0+5)%26=5
,(19+5)%26=24
,(0+5)%26=5
- 密文:
I, F, Y, F
→IFYF
三、实验步骤与代码实现
3.1 手动加密
- 任务:用学号末位作为密钥(如学号末位为7),加密明文:
data security has evolved rapidly
- 结果:手动计算得密文
khah zljbypaf ohz lcvsclk yhwpksf
,与程序输出一致。
3.2 编程实现加解密
源代码:
验证结果:
输入明文与密钥7,输出密文与手动计算一致,证明代码正确性。
四、暴力破解
4.1 破解原理:穷举攻击的核心逻辑
- 明文空间扩展:包含大小写字母、数字、符号共65个字符,密钥范围0-64。
- 破解思路:遍历所有密钥,解密后通过语言特征(如英文单词)筛选正确结果。
- 例如:破解下面密文,由于每一行使用了不同的密钥,因此,请一次只对一行进行解密:
qeFIP?eGSeECNNS,
5coOMXXcoPSZIWoQI,
avnl1olyD4l’ylDohww6DhzDjhuDil,
z.GM?.cEQc. 70c.7KcKMKHA9AGFK,
?MFYp2pPJJUpZSIJWpRdpMFY,
ZqH8sl5HtqHTH4s3lyvH5zH5spH4t pHzqHlH3l5K
Zfbi,!tif!xpvme!qspcbcmz!fbu!nfA
此时,明文空间为’ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.’
4.2 暴力破解代码
alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890 !?.'
ciphertext = input("请输入密文:")
for key in range(len(alphabet)):
# 对每个字符执行逆向移位,保留非字母字符
plaintext = ''.join([
alphabet[(alphabet.index(c) - key) % len(alphabet)]
if c in alphabet else c for c in ciphertext
])
print(f"密钥{key:2d}: {plaintext}") # 格式化输出便于查看
4.3 破解结果
密文行 | 正确密钥 | 明文 |
---|---|---|
1 | 34 | I love my kitty |
2 | 44 | My kitty loves me |
3 | 6 | Together we’re happy as can be |
4 | 32 | Though my head has suspicions |
5 | 45 | That I keep under my hat |
6 | 11 | Of what if I shrank to the size of a rat. |
7 | 1 | Yeah, she would probably eat me. |
关键技巧:通过观察连续英文单词(如love
、together
)快速定位正确密钥,无需逐行检查。
破解实例截图:
第一行:
六、实验小结:传统密码的局限与现代密码的启示
技术收获:
- 掌握凯撒密码的加解密核心(移位+模运算)与暴力破解流程(穷举+语言分析)。
- 学会处理扩展字符集(含数字、符号)的密码逻辑,提升代码鲁棒性。
安全启示:
- 凯撒密码的密钥空间仅70种可能,现代计算机可瞬间破解,证明密钥空间大小直接决定密码安全性。
- 传统密码依赖“算法保密”(如移位规则),而现代密码遵循“Kerckhoffs原则”(算法公开,仅密钥保密),安全性更可靠。
实践价值:
本次实验为学习对称加密(如AES)、非对称加密(如RSA)奠定了基础,理解“简单算法→复杂算法→现代密码学”的演进逻辑。
七、延伸思考:如果凯撒密码遇到现代密码学
- 如何增强凯撒密码安全性?
答:扩大密钥空间(如结合多表代换)、引入非线性变换(如仿射密码),但本质仍无法抵御现代攻击。 - 暴力破解适用于所有密码吗?
答:仅适用于密钥空间极小的密码(如凯撒密码),对AES-256等大密钥空间算法无效(穷举需超宇宙时间)。