鱼C论坛

 找回密码
 立即注册
查看: 4314|回复: 1

[技术交流] 维热纳尔密码方阵解密程序

[复制链接]
发表于 2019-7-22 15:09:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. import re
  2. zimu=['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']
  3. juzhen=[]
  4. juzhen.append(zimu)
  5. # 写入26个空列表
  6. for i in range(26):
  7.     juzhen.append([])
  8. # 递增写入字母
  9. n=0
  10. t=-1
  11. for i in juzhen:
  12.     v=n
  13.     t+=1
  14.     if t!=0:
  15.         for x in range(26):
  16.             i.append(zimu[v])
  17.             v+=1
  18.             if v==26:
  19.                 v=0
  20.         n+=1
  21. while True:
  22.     print("------('1'加密模式,'0'解密模式)------")
  23.     n=input("---请输入要选择的模式:")
  24.     if n=="1":
  25.         # 加密
  26.         name=input("------请输入要加密的字符:")
  27.         name_key=input("-----请输入进行加密的密钥:")
  28.         name_key=name_key.upper()
  29.         name=name.upper()
  30.         print("------正在排列计算中......")

  31.         # 打包列表
  32.         name_list=[]
  33.         for i in name:
  34.             name_list.append(i)
  35.         name_key_list=[]
  36.         for i in name_key:
  37.             name_key_list.append(i)

  38.         name233_list=[]
  39.         n=0
  40.         print("---------------------------------------")
  41.         K=1
  42.         for i in name_list:
  43.             A=re.search(r'[A-Z]',i)
  44.             if A==None:
  45.                 name233_list.append(i)
  46.                 continue
  47.             print("---第",K,"项:")
  48.             print("---明文:",i)
  49.             print("---密钥:",name_key_list[n])
  50.             dex=juzhen[0].index(name_key_list[n])# 通过密钥内容在第一行找到X轴坐标
  51.             print("---X轴:",dex)
  52.             dey=0
  53.             for j in juzhen:# 遍历寻找在X轴坐标含有加密内容的行
  54.                 if j[dex]==i:
  55.                     print("---Y轴:",dey)
  56.                     name233_list.append(juzhen[dey][0])
  57.                     break
  58.                 dey+=1# 行数计数器递增
  59.             n+=1# 密钥计数器递增,如果超出密钥长度,则重头开始
  60.             if n==len(name_key_list):
  61.                 n=0
  62.             K+=1
  63.             print("---------------------------------------")
  64.         # 输出结果
  65.         print("------------------------------------------加密结果--------------------------------------------")
  66.         print("------明文是:",name)
  67.         print("------密钥是:",name_key)
  68.         print("------密文是:",end=" ")
  69.         for i in name233_list:
  70.             print(i,end="")
  71.         s=26**len(name)
  72.         print("\n该方法加密的穷举破解次数为:",s,"次")
  73.         if len(name)>22:
  74.             cc="相当于每秒亿亿次的计算机连续破解{:.1f}亿年!"
  75.             s=s//(100000000*100000000)//60//60//24//30//12//100000000
  76.         else:
  77.             cc="相当于每秒一亿次的计算机连续破解{:.1f}年!"
  78.             s=s//100000000//60//60//24//30//12
  79.         print(cc.format(s))
  80.         print("------------------------------------------------------------------------------------------------")
  81.         
  82.     elif n=="0":
  83.         # 解密
  84.         name=input("------请输入要解密的字符:")
  85.         name_key=input("------请输入进行解密的密钥:")
  86.         name_key=name_key.upper()
  87.         name=name.upper()
  88.         print("------正在排列计算中......")

  89.         # 打包列表
  90.         name_list=[]
  91.         for i in name:
  92.             name_list.append(i)
  93.         name_key_list=[]
  94.         for i in name_key:
  95.             name_key_list.append(i)

  96.         name233_list=[]
  97.         n=0
  98.         print("---------------------------------------")
  99.         K=1
  100.         for i in name_list:
  101.             A=re.search(r'[A-Z]',i)
  102.             if A==None:
  103.                 name233_list.append(i)
  104.                 continue
  105.             print("---第",K,"项:")
  106.             print("---密文:",i)
  107.             print("---密钥:",name_key_list[n])
  108.             dex=juzhen[0].index(name_key_list[n])
  109.             print("---X轴:",dex)
  110.             dey=1
  111.             for j in juzhen[1:]:# 遍历寻找在每行第一列含有加密内容的行
  112.                 if j[0]==i:
  113.                     print("---Y轴:",dey)
  114.                     name233_list.append(juzhen[dey][dex])
  115.                     break
  116.                 dey+=1 # 行数计数器递增
  117.             n+=1# 密钥计数器递增,如果超出密钥长度,则重头开始
  118.             if n==len(name_key_list):
  119.                 n=0
  120.             K+=1
  121.             print("---------------------------------------")
  122.         # 输出结果
  123.         print("------------------------------------------解密结果--------------------------------------------")
  124.         print("------密钥是:",name_key)
  125.         print("------密文是:",name)
  126.         print("------明文是:",end=" ")
  127.         for i in name233_list:
  128.             print(i,end="")
  129.         print("\n------------------------------------------------------------------------------------------------")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-29 20:34:29 | 显示全部楼层
这个什么什么方阵我都搞不明白
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-24 00:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表