首页 > 编程语言 >编程算法 --- Polybius 方阵密码解密

编程算法 --- Polybius 方阵密码解密

时间:2024-10-12 09:59:45浏览次数:1  
标签:ordstr ordstrList mstr2 字母 解密 --- 密文 元音 Polybius

 

 

这段代码的作用是通过Polybius 方阵密码的方式来解密一段只包含元音字母的密文。具体来说,它通过元音字母的全排列来生成多个可能的映射方案,然后将密文中的元音字母转换成数字序列,并根据这些数字对查找字母棋盘中的字母,尝试还原出可能的明文。程序会输出所有可能的明文,供人工检查以找到正确的解密结果。

key = [['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']]  # 定义字母棋盘,表示5x5的Polybius方阵,用来解码对应的字母
       
ordstr = ''  # 初始化一个空字符串 ordstr,用于存储密文字符转换成数字后的结果
c = 'ouauuuoooeeaaiaeauieuooeeiea'  # 密文,由元音字母组成
import itertools  # 引入Python内置库 itertools,它提供生成器函数,如全排列(permutations)

num = ['a','e','i','o','u']  # 定义元音字母列表,将使用这个列表生成所有元音的全排列

# 对元音字母列表生成全排列,生成的排列会用作解码密文的不同映射
for num in itertools.permutations(num, 5):  
    order = list(num)  # 将当前的排列转换成列表,便于后续操作

    for i in c:  # 遍历密文 c 中的每一个字符(元音字母)
        a = str(order.index(i))  # 根据当前排列找到密文字符在排列中的位置(索引),并转换为字符串
        ordstr = ordstr + a  # 将这个位置索引追加到 ordstr 中,得到一个密文字符对应的数字序列
        
    ordstrList = list(map(int, list(ordstr)))  # 将字符串 ordstr 中的每个字符转换成整数列表 ordstrList
    ordstr = ''  # 清空 ordstr,为下一次排列循环做准备

    i = 0  # 初始化计数器 i,用来遍历 ordstrList 中的数字
    mstr2 = ''  # 初始化一个空字符串 mstr2,用来存储解码后的明文

    # 使用 while 循环,将数字列表 ordstrList 按每两个一组,解码成对应字母
    while (i != 28):  # 遍历 ordstrList 数字列表,直到处理所有字符(因为密文有 28 个字符)
        mstr1 = key[ordstrList[i]][ordstrList[i+1]]  # 根据数字对在 key(字母棋盘)中查找字母
        mstr2 = mstr2 + mstr1  # 将解码后的字母拼接到 mstr2 中,生成部分解密的明文
        i = i + 2  # 计数器加 2,处理下一个数字对

    print(mstr2)  # 输出当前排列下解码后的明文结果

 

标签:ordstr,ordstrList,mstr2,字母,解密,---,密文,元音,Polybius
From: https://www.cnblogs.com/GKLBB/p/18459917

相关文章

  • --Nacos服务注册与发现的概述与原理--
    什么是Nacos官网中的概述:Nacos官网链接Nacos/nɑ:kəʊs/是DynamicNamingandConfigurationService的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助您发现、配置和管理微服务。Nacos提供了一组简单易用的特性集,帮助您......
  • manim边做边学--有向图
    有向图和上一篇介绍的无向图基本一样,唯一的区别在于有向图的边有方向性,它表示的是顶点之间的单向或依赖关系。有向图G一般表示为:G=<V,E>。和无向图一样,V是顶点集合,E是边的集合。不同之处在于,无向图是用小括号(V,E),有向图用尖括号<V,E>。在有向图中,边是有方向的,所以,从顶点A到顶......
  • 图像去雾综述-图像去雨综述(代码+教程)
    图像去雾是一种针对雾霾、雨雾等大气干扰因素引起的图像模糊和降低对比度的现象进行处理的技术。在现实生活中,这种现象常常会影响到图像的质量,使得图像难以清晰地表现出真实景物。为了解决这个问题,研究人员开发了各种图像去雾算法。本文将对当前主流的图像去雾算法进行综述......
  • NETCORE - 日志插件 Microsoft.Extensions.Logging
    NETCORE-日志插件Microsoft.Extensions.Loggingnetcore的默认日志插件为 Microsoft.Extensions.Logging,已集成在框架中。使用样例:namespaceRailGraph.Controllers{[ApiController][Route("[controller]")]publicclassANeo4jController:ControllerBas......
  • Idea android应用kotlin-stdlib-1.8.20 kotlin-stdlib-jdk81.6.21冲突
    Ideaandroid应用kotlin-stdlib-1.8.20kotlin-stdlib-jdk81.6.21冲突idea中开发android应用,安装android插件后,新建项目,然后各种包更新,最后运行时提示kotlin-stdlib-1.8.20kotlin-stdlib-jdk8:1.6.21冲突错误如下:FAILURE:Buildfailedwithanexception.Whatwentwrong:......
  • 链表-数据结构
    链表的连接简单题目描述:创建两个链表:S1,S2;让s1和s2实现合并连接;连接要求:输入s1节点的数值下标和输入s2的数值下标,如果数值相同实现连接;比如:cin>>s1(2),cin>>s2(0);就让s1的下标2:数值1和s2的下标0:数值1比较相同--------321123s1数值1在跟s......
  • apisix~自定义文件上传代理插件~支持form-data文件和kv参数
    参考文献https://stackoverflow.com/questions/24535189/composing-multipart-form-data-with-a-different-content-type-on-each-parts-with-jhttps://www.reddit.com/r/lua/comments/yaizxv/lua_post_multipartformdata_and_a_file_via/?rdt=60519https://github.com/rstudi......
  • AD9129板卡设计原理图:303-两路5.6Gsps 14bit DA FMC子卡
     一、板卡概述   FMC303可实现宽波段、双通道、14位、5.6GSPS(2.8gsps直接射频综合)DAC功能,时钟可采用内部时钟源(可选择锁定到外部参考),或外部提供的采样时钟。此外还为用户提供定制采样控制的触发器输入。FMC303在机械上和电气上符合FMC标准(ANSI/VITA 57.1)。该......
  • 【2024-10-11】传承运动
    20:00人生易老天难老,岁岁重阳。今又重阳,战地黄花分外香。一年一度秋风劲,不似春光。胜似春光,寥廓江天万里霜。                                                 ——《采......
  • 文件工具类 - C#小函数类推荐
          此文记录的是文件工具类。/***文件工具类AustinLiu刘恒辉ProjectManagerandSoftwareDesignerE-Mail:[email protected]:http://lzhdim.cnblogs.comDate:2024-01-1515:18:00***/namespaceLzhdim.LPF.Utility......