用python实现困在栅栏中的凯撒解密
试试就试试
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实现困在栅栏中的凯撒解密相关推荐
- CTF题库—实验吧(密码学)之困在栅栏里的凯撒
版权声明:如果对大家有帮助,大家可以自行转载的.原文链接: https://blog.csdn.net/qq_37992321/article/details/84574878 1.先看看题目:困在栅 ...
- 实验吧——(crypto)困在栅栏里的凯撒 writeup
题目: 小白发现了一段很6的字符:NlEyQd{seft} 由题目我们可以猜测这是关于栅栏密码和凯撒密码,而且要先解栅栏密码再解凯撒密码. 补充些基本知识: 1:恺撒密码 在密码学中,恺撒密码(英语: ...
- 【CTF】实验吧 困在栅栏里的凯撒
题目先提到栅栏,再提到凯撒,按照顺序先栅栏解码,再凯撒解码. 一般密码的开头不是flag就是key或者ctf 所以选择"6栏",在进行凯撒解码 在所有组合中,发现CTF即为flag
- 凯撒密码c++语言程序,C++中的凯撒密码程序
我想用C++编写凯撒密码程序.我使用了四个函数,一个用于选择Shift键,两个用于加密和解密,最后一个用于实现凯撒密码,使用输入文件读取文本并将加密或解密文本输出到输出文件中.我试图运行代码,它正在崩 ...
- python字母移位_python字母移位,凯撒密码
将字符串中的字符平移n位,就是凯撒密码.比如此处的后移两位,a变为c,z变为b,以此类推,只换字母其它字符不变. #!/usr/bin/python3 str=r"g fmnc wms bg ...
- 微课|中学生可以这样学Python(例5.8):凯撒加密
适用教材: 董付国,应根球.<中学生可以这样学Python>.清华大学出版社,2017. 第5章 Python序列及应用 5.5.6 精彩例题分析与解答 例5-8 凯撒加密算法 京东 ...
- python中凯撒密码_python实现凯撒密码、凯撒加解密算法
凯撒密码的原理:计算并输出偏移量为3的凯撒密码的结果 注意:密文是大写字母,在变换加密之前把明文字母都替换为大写字母 def casar(message): # *************begin* ...
- python密码学凯撒密码_凯撒密码在Python
python密码学凯撒密码 Hello everyone, in this tutorial you'll learn about Caesar cipher in Python. If you ha ...
- python实现凯撒密码加密与解密(暴力求解)
在密码学中,凯撒密码(英语:Caesar cipher),或称凯撒加密.凯撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一 ...
最新文章
- 为放大器模拟输入模块提供可靠的输入过电压保护
- 识别User Agent屏蔽一些Web爬虫防采集
- 【题解】已经没有什么好害怕的了
- 纪念品分组pascal程序
- P3914-染色计数【树形dp】
- mfc嵌入matlab绘图窗口,将matlab的图嵌入MFC
- 【项目管理】CMM能力成熟度模型
- mysql增删改查扩展_MySQL(增删改查补充)
- maven仓库的安装与配置
- dll文件用什么语言编写_为什么Unix不用功能更强大的C++而是用C编写
- 负载均衡算法 : 加权轮询
- python pandas series想赋予新的值_Python-pandas根据其他列的值创建新列/逐行应用多列的功能...
- power bi 商业智能相关书籍介绍
- 学习一下 PDF417 条码
- 【新书速递】Unity AR/VR 开发必知必会
- 计算机内存国产,拼多多上买的纯国产内存条会不会翻车?雷赤 内存条评测
- 4K智能AI双目自动跟踪云台摄像机
- Stata画出数据的时间序列折线图和拟合趋势线
- 计算机安装Hp1005打印机,hp1005打印机驱动
- vue内使用 cytoscape(数据可视化)
热门文章
- 使用Eclipse来开发调试WebBuilder项目
- java自动计数_Java 程序 自动计数器
- USB在WINDOWS下的驱动开发
- Python、Numpy、Pandas、SciPy、Scikit-Learn、Matplotlib的关系及学习资料
- Docker实现原理/容器原理(LXC,Cgroups,Docker)
- matlab求解复杂隐函数,MATLAB复杂隐函数求解!求大神指导!
- Python网络爬虫与信息提取!爬虫批量搜索音乐并下载!
- android dng图片,android - 使用Camera2 API拍摄dng图片 - 堆栈内存溢出
- 简易理解设计模式之:装饰模式——穿衣服经典案例
- RTOS 中采样任务的设计