秘钥爆破 变种维吉尼亚
加密代码如下
from random import randrange
text_list=' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\t\n'
key=[randrange(1,97) for i in range(randrange(15,30))]
print('key = '+str(key))
def encrypt(s,k):out=''for i in range(len(s)):index=text_list.index(s[i])index*=k[i%len(k)]index%=97out+=text_list[index]return out
plain=open('plain.txt','r').read() # TOEFL reading passage
cipher=encrypt(plain,key)
open('cipher.txt','w').write(cipher)
可以发现 对每个单词做了一下映射
我们需要知道秘钥的长度 解密的秘钥 手上只有密文 看起来不可读 怎么分析?
- 首先最关键的是要发现空格不会变 这样就可以猜测单词长度了
- 间隔重复秘钥 按照长度找 比如每三个长度取出来一串 最后计数 发现{gY出现的最多 猜测是the 得到秘钥对应位置的值 (解密秘钥和加密秘钥不同,长度一致)
- 找key长度 对每个{yG找到在ciphertext中的位置
[3, 61, 612, 1105, 1279, 1656, 2091]
考虑到第一个{yG出现在第一个key长度中
那么对每个数-3
得到
[0, 58, 609, 1102, 1276, 1653, 2088]
发现他们有个共同的倍数29
linux下可以输入命令 factor 58 以此类推 或者手动gcd搞
所以keylen=29
还有一个关键是第一个单词长度为2
所以可能为
In
By
At
As
如何确定
每29个算一下看出来的结果 ※※※※※
不是a-zA-Z0-9,.:-
基本就不是了 对每个我们猜的结果 都可以用这个验证
上面这个解密可以自己实现一下
就是个逆元
ab mod 97=c mod 97
已知a,c求b
b = c (a在97意义下的逆元) %97
哦对了
当你找出来较多的单词 就可以百度啦! - 题目做完发现可以用 ※※※※※处的方法来暴力破解= = 问题不大…
混乱的解密脚本
import gmpy2
import sys
from random import randrange
import re
from collections import Counter
text_list=' !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\t\n'
cipherText = open('cipher.txt','r').read()
print sys.argv[1]
def inv(x):return gmpy2.invert(x,97)
def repeat():c = Counter()for i in range(len(cipherText)):s = cipherText[i:i+int(sys.argv[1])]c[s] = c[s] + 1print sorted(c.items(),key = lambda eachItem:eachItem[1],reverse=True)
def brute():for keylen in range(15,30):num = 0if len(cipherText)%keylen==0:num = len(cipherText)/keylenelse:num = len(cipherText)/keylen+1L = []for i in range(num):start = i*keylenend = (i+1)*keylens = cipherText[start:end]L.append(s)for start in range(keylen):for length in range(1,keylen-start):if length ==3 :c = Counter()ans = []for mylist in L:ans.append(mylist[start:start+length])Max = 0poss = ''for a in ans:c[a] = c[a] + 1if c[a] > Max:Max = c[a]poss = aprint "_______________"# print (keylen,start,length,sorted(c.items(),key = lambda eachItem:eachItem[1],reverse=True))print (keylen,start,length,poss,Max)
def findonekey(s,to):indexto=text_list.index(to)indexs=text_list.index(s)return inv(indexs)*indexto%97
def splitInto():cnt = 0fuckthistext = open('this_is_21.txt','r').read()for i in range(len(fuckthistext)):if i%29==0:print "012345678901234567890123456789here is the line {0}".format(cnt)print fuckthistext[i:i+29]cnt += 1
splitInto()
秘钥爆破 变种维吉尼亚相关推荐
- 维吉尼亚密码通过字符频率爆破
题目的密文如下: qy sdrgx bswkjlpuh zmntp rv wesokk qp fcabwz gqw rdi nlufaaehp rijmntp jjvwmej oqg etz jxmk ...
- 维吉尼亚密码_附有链接爆破
维吉尼亚编码 多表代替密码中最著名和最简单的是 Vigenere 密码.它的代替规则集由 26 个 Caesar 密码的代替表组成,其中每一个代替表是对明文字母表移位 0 到 25 次后得到的代替单表 ...
- CTF杂项之“维吉尼亚密码”
Didi 在这次省赛上做到了一到维吉尼亚密码的题,以前没做过很懵,问了同学才知道 先上图: baby 是秘钥 glbe{pnf_njedc_js_ufjs_kmvrocz!} 是密文 在线解密 htt ...
- php实现维吉尼亚算法,python实现维吉尼亚算法
本文实例为大家分享了python实现维吉尼亚算法的具体代码,供大家参考,具体内容如下 1 Virginia加密算法.解密算法 Vigenenre密码是最著名的多表代换密码,是法国著名密码学家Vigen ...
- 维吉尼亚密码破解(Python完整详细源码)
维吉尼亚密码破解(Python完整详细源码) 欢迎大家访问我的GitHub博客 https://lunan0320.github.io/ 文章目录 维吉尼亚密码破解(Python完整详细源码) 1.写 ...
- 维吉尼亚密码的破解算法及python代码实现
目录 1. 密文描述 1.1 密文1 1.2 密文2 2. 破解原理 2.1 重合指数法确定密钥长度 2.2 互重合指数确定子串间相对偏移 2.3 密钥字的确定 2.4 密文破解 3. 破解代码 参考 ...
- 维吉尼亚密码加解密与破解
实验目的 1.进一步理解维吉尼亚密码的加解密原理 2.进一步理解维吉尼亚密码的缺陷和利用方法 3.提高编程实践能力 实验要求 1.实现维吉尼亚加解密函数 2.破解维吉尼亚加密的密文 实验步骤 1.维吉 ...
- 古典密码之维吉尼亚密码破解思路
首先要说一句,这是我第一次用python coding,所以很多地方都不太懂,吐槽自己竟然用sum当变量名,之后有用sum()函数,然后报了错还不知道为什么.不知道用ascii码要做chr()转化,等 ...
- 【密码学原理与实践】(四)维吉尼亚密码 符java代码实现
维吉尼亚密码(Vigenere Cipher) 转载请著明出处 无论是移位密码还是代换密码,一旦秘钥被选定,则每个字母对应的数字都被加密变换成对应的唯一数字.我们称这种为单表代换密码,而本篇讲的是一种 ...
最新文章
- 你有没有扔过一枚硬币选择正反面?
- The import com.google cannot be resolved解决方法
- C#修改系统环境变量,调用批处理bat
- ns3中调试程序------命令行、gdb和logging系统
- 机器人绳索英雄下载苹果手机_警察机器人绳索英雄游戏下载-警察机器人绳索英雄苹果版v1.0-FC游戏网...
- Tomcat6.0配置集合
- python opencv 直方图均衡化_Python opencv—直方图/直方图均衡化/直方图比较,pythonopencv...
- [转载] C++转JAVA的转换方法及约定
- SQL AZURE数据库创建,云计算体验之一
- Python自制日常办公辅助工具之:批量视频截图,子集固定尺寸截图+序列化命名
- 第二课 Python Web企业门户网站-框架搭建
- 印章仿制工具_PS仿制图章工具怎么使用?仿制图章工具使用方法图解
- uWSGI, Gunicorn,ngnix 服务器 详解
- Blowfish简介
- 二十世纪初的心理学时间轴制作
- mybatis的switch标签
- 6-3 定义Person类
- 云南移动机房介绍,昆明移动机房服务器托管、机柜、移动大带宽租用
- 聊聊信任:衣服掉地上会脏的
- 1. emqx docker安装以及持久化配置