You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复Python字母频率分析密码解密代码解密不完整问题

频率分析替换密码解密程序修复方案

基于ETAOIN字母频率硬排序一一映射的单表替换解密本身存在固有误差,叠加代码逻辑的常见疏漏,就会出现解密不完整、输出不符合预期的问题,按以下步骤逐一排查修复即可。

常见核心bug点

  • 预处理逻辑错误:统计频率时未统一字母大小写,把同一字母的大写、小写形式拆成两个独立字符统计,拉低频率统计准确率;或是读取文件时编码错误,部分特殊字符读取失败丢内容。
  • 替换逻辑缺陷:解密替换时跳过了非字母字符(空格、标点、数字、换行),或是替换后没有还原原文本的大小写、格式,导致输出内容残缺。
  • 频率映射逻辑僵化:直接把密文字母的频率排序结果和ETAOIN标准顺序按索引一一绑定,没有考虑不同长度、不同主题文本的频率波动——尤其是长度低于1000字符的密文,频率排序和标准顺序偏差会非常大,硬匹配必然出现大量映射错误。

可直接复用的修复后代码逻辑

from collections import Counter

# 标准英文高频字母排序(从高到低)
ETAOIN = "ETAOINSHRDLCUMWFGYPBVKJXQZ"

# 1. 读取密文,保留全部原始内容
with open("cipher.txt", "r", encoding="utf-8") as f:
    raw_cipher = f.read()

# 2. 统计频率:仅提取字母、统一转大写统计,不修改原始密文
alpha_in_cipher = [c.upper() for c in raw_cipher if c.isalpha()]
freq_counter = Counter(alpha_in_cipher)
# 密文字母按出现频率从高到低排序
cipher_sorted = [item[0] for item in sorted(freq_counter.items(), key=lambda x: (-x[1], x[0]))]

# 3. 生成初始映射表
decrypt_map = {}
for cipher_char, plain_char in zip(cipher_sorted, ETAOIN):
    decrypt_map[cipher_char] = plain_char

# 4. 解密逻辑:保留原文本所有格式、大小写
def decrypt(content, mapping):
    result = []
    for char in content:
        if char.isupper():
            result.append(mapping.get(char, char))
        elif char.islower():
            # 小写字符转大写查映射表后转回小写
            result.append(mapping.get(char.upper(), char).lower())
        else:
            # 非字母内容(空格、标点、换行、数字)直接保留
            result.append(char)
    return "".join(result)

# 输出初始解密结果
initial_result = decrypt(raw_cipher, decrypt_map)
print("初始解密结果:\n", initial_result)

初始结果修正技巧

初始映射得到的结果不会100%正确,不需要上复杂算法,按以下规则手动调整映射表即可快速得到完整正确明文:

  • 先定位单字母单词:英文中单字母单词几乎只有A和I,直接对应修正映射关系
  • 再匹配高频短词:3字母高频词优先匹配THE、AND、FOR,2字母高频词优先匹配OF、TO、IN、IS,匹配到对应词就调整映射表中对应字母的关系
  • 最后根据缩写校验:带撇号的短词比如't对应not的尾字母、's对应所有格、're对应are,可以快速定位剩余错位的字母
  • 每调整一次映射表就重新调用decrypt函数生成新结果,重复3-5轮就能得到完全正确的明文。

不要试图靠纯频率硬匹配得到100%正确结果,所有单表替换频率分析都需要少量人工校验调整,尤其是短密文场景。

内容的提问来源于stack exchange,提问作者FoxCode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 09:24:19