试试就试试

import enchant
# import time
import math# 设置英文
d = enchant.Dict("en_US")
# 读取键盘输入
s = input("请输入加密后的密文:")# 记录每一次是单词的准确率及栏数和key
word_num_list = {}# 检查句子中的单词是否有效
def words_checked(s, count,key):# 句子中总的单词率correct_rate = 0.0# 表示i个字母为一个单词for i in range(3, 6):words_list = []# 以空格分割单词# 文本单词个数text_len = len(s) // ifor j in range(text_len):words_list.append(s[j*i:i*(j+1)])# 检查每一个单词是否有效bool_word = map(d.check, words_list)current_correct_rate = sum(bool_word) / text_lenprint(current_correct_rate)# 总的是单词的概率correct_rate += current_correct_rate# 记录句子中是单词的概率及栅栏数和keyword_num_list[correct_rate] = "栏数为%s--key为%s时--准确率为:%s" % (count,key,correct_rate)# print(correct_rate)if correct_rate > 0.5:return Truereturn Falsedef file_write(one_str):with open("./pass.txt", 'a') as f:f.write(one_str)def fn(count,s):# 密钥key = 0# 找到正确key与明文# 记录正确的明文和密钥# vispass = ""while True:# 记录每一个key解密后的结果ss = ""if words_checked(s,count,key):vispass = "%s栏--密钥key为%s,明文结果为:%s" % (count,key,s)print(vispass)return True;for c in s:# 替换每一个字母if c != " ":# 将每一个字母的ascii码值减一dig = ord(c)-1# 当解密结果小于A时,替换成Zif (dig < 65):dig = 90# 当解密结果小于a时,替换成zelif(90<dig<97):dig = 122# 将字符追加到ss字符串ss += chr(dig)else:# 当字符为空格时,不解密,直接连接上ss += " "# 将s替换成这次接密的结果s = sskey += 1# 退出循环if key > 25:breakout = ("%s栏---当key=%s时,解密结果为: %s" % (count, key, s))file_write(out+'\n')print(out)# time.sleep(0.1) # 让程序睡一秒,使我们可以看到每一次解密的结果# print(vispass)def zhalan():zhacount = []fn(1,s)# 字符串总长度lenth = len(s)l = int(math.sqrt(lenth))# 计算可能的栏数for i in range(2,l+1):if lenth % i == 0:zhacount.append(i)print(zhacount)# 遍历每一栏for i in zhacount:newstr = ""# 计算间隔ge = lenth // i# 求出新字符串# j次数for j in range(ge):# k 是当前栏数for k in range(i):newstr += s[j+ge*k]zha_str = "%s栏解密后为:%s" % (i, newstr)file_write(zha_str+'\n')print(zha_str)if fn(i,newstr):return;if __name__=="__main__":zhalan()# 取出最大准确率及对应的栏数max_rate = max(word_num_list)print("最可能的匹配为:",word_num_list[max_rate])

稍微的调整

import enchant
# import time
import math# 设置英文
d = enchant.Dict("en_US")
# 读取键盘输入
s = input("请输入加密后的密文:")
s = s.lower()# 记录每一次是单词的准确率及栏数和key
word_num_list = {}# 检查句子中的单词是否有效
def words_checked(s, count,key):# 句子中总的单词率correct_rate = 0.0# 表示i个字母为一个单词for i in range(3, 6):words_list = []# 以空格分割单词# 文本单词个数# text_len = len(s) // i# for j in range(text_len):#     words_list.append(s[j*i:i*(j+1)])text_len = len(s) - ifor j in range(text_len):words_list.append(s[j:j+i])# 检查每一个单词是否有效bool_word = map(d.check, words_list)current_correct_rate = sum(bool_word) / text_lenprint(current_correct_rate)# 总的是单词的概率correct_rate += current_correct_rate# 记录句子中是单词的概率及栅栏数和keyword_num_list[correct_rate] = "栏数为%s--key为%s时--准确率为:%s,解密后为:%s" % (count, key, correct_rate, s)# print(correct_rate)if correct_rate > 0.5:return Truereturn Falsedef file_write(one_str):with open("./pass.txt", 'a') as f:f.write(one_str)def fn(count,s):# 密钥key = 0# 找到正确key与明文# 记录正确的明文和密钥# vispass = ""while True:# 记录每一个key解密后的结果ss = ""if words_checked(s,count,key):vispass = "%s栏--密钥key为%s,明文结果为:%s" % (count,key,s)print(vispass)return True;for c in s:# 替换每一个字母if c != " ":# 将每一个字母的ascii码值减一dig = ord(c)-1# 当解密结果小于A时,替换成Zif (dig < 65):dig = 90# 当解密结果小于a时,替换成zelif(90<dig<97):dig = 122# 将字符追加到ss字符串ss += chr(dig)else:# 当字符为空格时,不解密,直接连接上ss += " "# 将s替换成这次接密的结果s = sskey += 1# 退出循环if key > 25:breakout = ("%s栏---当key=%s时,解密结果为: %s" % (count, key, s))file_write(out+'\n')print(out)# time.sleep(0.1) # 让程序睡一秒,使我们可以看到每一次解密的结果# print(vispass)def zhalan():zhacount = []fn(1,s)# 字符串总长度lenth = len(s)# l = int(math.sqrt(lenth))l = lenth# 计算可能的栏数for i in range(2,l+1):# if lenth % i == 0:zhacount.append(i)print(zhacount)# 遍历每一栏for i in zhacount:newstr = ""# 计算间隔ge = lenth // i# 求出新字符串# j次数for j in range(ge):# k 是当前栏数for k in range(i):newstr += s[j+ge*k]zha_str = "%s栏解密后为:%s" % (i, newstr)file_write(zha_str+'\n')words_checked(zha_str, i, 0)print(zha_str)if fn(i,newstr):return;if __name__=="__main__":zhalan()# 取出最大准确率及对应的栏数max_rate = max(word_num_list)print("最可能的匹配为:",word_num_list[max_rate])

用python实现困在栅栏中的凯撒解密相关推荐

  1. CTF题库—实验吧(密码学)之困在栅栏里的凯撒

    版权声明:如果对大家有帮助,大家可以自行转载的.原文链接: https://blog.csdn.net/qq_37992321/article/details/84574878 1.先看看题目:困在栅 ...

  2. 实验吧——(crypto)困在栅栏里的凯撒 writeup

    题目: 小白发现了一段很6的字符:NlEyQd{seft} 由题目我们可以猜测这是关于栅栏密码和凯撒密码,而且要先解栅栏密码再解凯撒密码. 补充些基本知识: 1:恺撒密码 在密码学中,恺撒密码(英语: ...

  3. 【CTF】实验吧 困在栅栏里的凯撒

    题目先提到栅栏,再提到凯撒,按照顺序先栅栏解码,再凯撒解码. 一般密码的开头不是flag就是key或者ctf 所以选择"6栏",在进行凯撒解码 在所有组合中,发现CTF即为flag

  4. 凯撒密码c++语言程序,C++中的凯撒密码程序

    我想用C++编写凯撒密码程序.我使用了四个函数,一个用于选择Shift键,两个用于加密和解密,最后一个用于实现凯撒密码,使用输入文件读取文本并将加密或解密文本输出到输出文件中.我试图运行代码,它正在崩 ...

  5. python字母移位_python字母移位,凯撒密码

    将字符串中的字符平移n位,就是凯撒密码.比如此处的后移两位,a变为c,z变为b,以此类推,只换字母其它字符不变. #!/usr/bin/python3 str=r"g fmnc wms bg ...

  6. 微课|中学生可以这样学Python(例5.8):凯撒加密

    适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第5章  Python序列及应用 5.5.6  精彩例题分析与解答 例5-8  凯撒加密算法 京东 ...

  7. python中凯撒密码_python实现凯撒密码、凯撒加解密算法

    凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...

  8. python密码学凯撒密码_凯撒密码在Python

    python密码学凯撒密码 Hello everyone, in this tutorial you'll learn about Caesar cipher in Python. If you ha ...

  9. python实现凯撒密码加密与解密(暴力求解)

    在密码学中,凯撒密码(英语:Caesar cipher),或称凯撒加密.凯撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一 ...

最新文章

  1. 为放大器模拟输入模块提供可靠的输入过电压保护
  2. 识别User Agent屏蔽一些Web爬虫防采集
  3. 【题解】已经没有什么好害怕的了
  4. 纪念品分组pascal程序
  5. P3914-染色计数【树形dp】
  6. mfc嵌入matlab绘图窗口,将matlab的图嵌入MFC
  7. 【项目管理】CMM能力成熟度模型
  8. mysql增删改查扩展_MySQL(增删改查补充)
  9. maven仓库的安装与配置
  10. dll文件用什么语言编写_为什么Unix不用功能更强大的C++而是用C编写
  11. 负载均衡算法 : 加权轮询
  12. python pandas series想赋予新的值_Python-pandas根据其他列的值创建新列/逐行应用多列的功能...
  13. power bi 商业智能相关书籍介绍
  14. 学习一下 PDF417 条码
  15. 【新书速递】Unity AR/VR 开发必知必会
  16. 计算机内存国产,拼多多上买的纯国产内存条会不会翻车?雷赤 内存条评测
  17. 4K智能AI双目自动跟踪云台摄像机
  18. Stata画出数据的时间序列折线图和拟合趋势线
  19. 计算机安装Hp1005打印机,hp1005打印机驱动
  20. vue内使用 cytoscape(数据可视化)

热门文章

  1. 使用Eclipse来开发调试WebBuilder项目
  2. java自动计数_Java 程序 自动计数器
  3. USB在WINDOWS下的驱动开发
  4. Python、Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系及学习资料
  5. Docker实现原理/容器原理(LXC,Cgroups,Docker)
  6. matlab求解复杂隐函数,MATLAB复杂隐函数求解!求大神指导!
  7. Python网络爬虫与信息提取!爬虫批量搜索音乐并下载!
  8. android dng图片,android - 使用Camera2 API拍摄dng图片 - 堆栈内存溢出
  9. 简易理解设计模式之:装饰模式——穿衣服经典案例
  10. RTOS 中采样任务的设计