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

当转换无一一对应关系时,如何用Python解密文本?附替换加解密代码

用Python处理替换密码的解密(含非严格一一对应场景说明)

当替换密码不存在严格的一一对应关系时,解密确实会麻烦一些——毕竟一个密文字符可能对应多个明文字符,这时候得结合上下文或者频率分析来猜。不过如果是像**移位密码(凯撒密码)**这种有固定循环映射的替换(本质还是一一对应,只是循环移位),咱们直接用Python标准库就能快速实现加解密,完全不用额外装包。

核心思路

Python的str.maketrans()可以创建字符映射表,str.translate()则能根据这个表完成字符替换。加密时是明文→密文的映射,解密时反过来,把密文→明文的映射表传进去就行。

完整示例代码

def cifrar(word, BASE, CIFRA_CODE):
    # 创建明文到密文的映射表
    table = str.maketrans(BASE, CIFRA_CODE)
    # 应用映射并打印结果
    print(word.translate(table))

def decifar(word, BASE, CIFRA_CODE):
    # 反过来,创建密文到明文的映射表
    table = str.maketrans(CIFRA_CODE, BASE)
    print(word.translate(table))

def main():
    # 明文字符集(这里用大写英文字母)
    BASE = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    # 密文字符集:把BASE循环后移3位(凯撒密码的经典移位)
    CIFRA_CODE = "DEFGHIJKLMNOPQRSTUVWXYZABC"
    
    # 菜单选择加密/解密
    menu = int(input("(1) Crypto (2) Decrypt: "))
    word = input("Enter the text: ")
    
    if menu == 1:
        cifrar(word.upper(), BASE, CIFRA_CODE)
    elif menu == 2:
        decifar(word.upper(), BASE, CIFRA_CODE)
    else:
        print("Invalid option!")

if __name__ == "__main__":
    main()

代码说明

  • cifrar函数:接收明文、明文字符集、密文字符集,生成映射表后完成加密并输出。
  • decifar函数:和加密逻辑相反,用密文字符集映射回明文字符集,实现解密。
  • 主函数里的BASE和CIFRA_CODE是移位3位的凯撒密码映射,你可以根据需求修改移位位数或者自定义替换规则。

关于非一一对应场景的补充

如果是真的没有一一对应关系的替换(比如多个明文字符映射到同一个密文字符),那解密会出现歧义,这时候单纯靠字符映射就不够了。你可能需要结合字符频率分析(比如英语里字母E出现频率最高),或者借助上下文语义来推断最合理的明文。Python的标准库虽然没有直接的频率分析工具,但你可以用collections.Counter来统计字符出现次数,辅助解密。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:34:00