1. 项目概述:替换密码与Python破解原理
替换密码是最基础的加密方式之一,其核心原理是将明文中的每个字母按照固定规则替换为另一个字母。比如著名的凯撒密码就是让字母表位移固定位数(如A→D,B→E)。这种加密方式在古典密码学中广泛应用,但用现代计算技术破解只需几行Python代码。
我在一次CTF比赛中首次接触到这类密码破解,当时面对一段看似乱码的文本,通过频率分析工具不到3分钟就还原出原文。这种"降维打击"的快感让我意识到,理解基础加密的弱点对提升安全意识至关重要。本文将分享如何用Python实现从简单替换到复杂字母映射的自动化破解。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 密码学基础与频率分析原理
2.1 替换密码的常见变体
- 单字母替换:每个明文字母对应唯一密文字母(如A→X,B→Z)
- 多字母替换:单个字母可能对应多个密文字母(安全性略高)
- 凯撒移位:字母表固定位移(如+3:A→D,B→E)
- 关键字替换:用关键词打乱字母表顺序(如关键字"SECRET"生成替换表)
2.2 英语字母频率特征
英语文本中字母出现频率具有显著规律性。根据牛津语料库统计:
- 前五位高频字母:E(12.7%) > T(9.1%) > A(8.2%) > O(7.5%) > I(7.0%)
- 后五位低频字母:J(0.15%) < Z(0.07%) < X(0.15%) < Q(0.10%) < K(0.77%)
这种统计规律使得频率分析攻击成为可能。例如密文中出现频率最高的字母大概率对应明文的E。
注意:短文本(<100字符)的频率可能偏离统计值,此时需要结合字母组合特征辅助分析
3. Python破解实现详解
3.1 基础工具准备
python复制import string
from collections import Counter
import matplotlib.pyplot as plt # 可选可视化
3.2 密文频率统计函数
python复制def frequency_analysis(ciphertext):
# 过滤非字母字符
filtered = [c.upper() for c in ciphertext if c.isalpha()]
total = len(filtered)
# 统计字母频率
freq = Counter(filtered)
sorted_freq = sorted(freq.items(), key=lambda x: x[1], reverse=True)
# 计算百分比
result = {char: count/total for char, count in sorted_freq}
return result
3.3 频率匹配算法
python复制# 英语标准频率表(百分比)
ENGLISH_FREQ = {
'E': 12.7, 'T': 9.1, 'A': 8.2, 'O': 7.5,
'I': 7.0, 'N': 6.7, 'S': 6.3, 'H': 6.1,
# ... 完整表见附录
}
def guess_mapping(cipher_freq):
cipher_sorted = sorted(cipher_freq.items(), key=lamb
