Vigenere密码加密解密原理
先从简单的单表代替开始说起:要知道,在CTF题中,有很多很多都是单表代替的题,比如说:
BH=CWG=EO=IEI=;DEDEDEY
所有数据长成这样,神TM能够认识对吧,但是要注意,这可是CTF的比赛!所以得分模式很套路:
最后的答案一般都是flag{}或者FLAG{}什么的对吧
那么,计算一下:
ord(‘Y’)-ord(‘}’)= - 36
那么,再试试:ord(‘B’)+36 = ord(‘f’)
所以,直接尝试一发,所以的都是36的偏移就好了,对吧
很简单的kaisamima对吧,本质上是个ascii码表的偏移对应,或者是自己定义的某些字符的循环对应
在数据文本字符情况下足够的情况下,统计英文字频即可简单破解:因为英文中的每个字符的出现概率是有固定的比例的(不是所有的都一定按照顺序,但是大概已经可以基本对应了)
那么,来谈谈什么是Virginia密码:因为单表对应很容易破解,那么换成多表呢?
所以我们确定一种对应的方法:Virginia
这种方法需要密钥,密钥的长度是单表的数量(其实是不同的字符个数)
其实,多个单表的对应关系是这样,可以一个一个算,但是,根据多个单表的思想来理解会更简单
用python代码举例会更简单吧:
import string
s = string.printable[36:62]word = 'TOBEORNOTTOBETHATISTHEQUESTION'
cipher = 'RELATIONS'
info = ''for i in range(0,len(word)):info += s[(s.find(word[i])+s.find(cipher[i%len(cipher)]))%26]
print infoflag = ''
for i in range(0,len(info)):flag += s[(s.find(info[i])+26-s.find(cipher[i%len(cipher)]))%26]
print flag
当然,在实际应用中并不会有这么的简单:我们不可能知道密钥是什么,甚至连密钥的长度我们也无从知道
那么,就只能根据方法来暴力测试:
kasiski测试法,来测得密钥的长度,理论是:当字符数目足够多的话,那么有可能出现,相同的字符串被相同的偏移串加密,那么得到的结果是相同的,我们把这些所有的可能全部统计下来,可以得到这些偏移值之间的相对距离。取他们的公共因子,就可能是密钥的长度
暴力的python代码如下:
def get_len(s):val = []length = len(s)const = 4for i in range(0,length-const):for j in range(i+1,length):if s[i:i+const] == s[j:j+const]:val.append(j-i)print val
其中的const越大,说明出现的概率越低,数量会越少;const越小,出现的概率越大,数量越多
我们需要取得一个适中的值,让val里大概有个10个数字左右,然后大概看下他们的公因数,一一分析,或者结合其他的方法来进行密钥长度的判断以及下一步计算
接下来就是确定密钥
这里给出两个CTF样例题,可以解释说明得很明白:
https://findneo.tech/171005NuptVigenereWP/#%E5%8F%82%E8%80%83%E9%93%BE%E6%8E%A5
https://findneo.tech/180527suctf/#Magic
Vigenere密码加密解密原理相关推荐
- 单表代换密码加密解密
单表代换密码加密解密原理: 单表代换是指英文字母在进行密码编码替换的时候,有一张对照表,也就是说,对于每一个字母,都是唯一对应的,如: 26个源字母表为:abcdefghijklmnopqrstuvw ...
- java加密解密代码_base64位加密解密原理及js代码实现
base64位加密解密原理及js代码实现 在网上找了很多关于Base64加密解密的原理以一个比较通俗易懂的方式理解整理了一下大致原理如下 先上base64对照表 #加密 #1:将明文对照以acsii码 ...
- python中字符移位加密_1.1 移位密码加密解密python实现
例题1.1 移位密码加密解密 1.1.使用穷尽密钥搜索法破译如下利用移位密码加密的密文: ESPESTCOPIPCNTDPYPPODACZRCLXXTYR. 1.1答案: K=11,明文序列为: th ...
- php加密密码解析,php密码加密解密
php密码加密解密 龙行 PHP 2020-3-19 1002 0评论 function MD5PWD($data) { $pwd = md5($data); //把密码分割成 ...
- 维吉尼亚密码加密/解密在线工具
维吉尼亚密码加密/解密在线工具,工具链接:http://www.atoolbox.net/Tool.php?Id=856 维吉尼亚密码是在凯撒密码基础上产生的一种加密方法,它将凯撒密码的全部25种位移 ...
- Vigenere密码(案例:Vigenere密码加密单词”explanation“,秘钥为”leg“。)
Vigenere密码 是什么 是使用一系列凯撒密码组成密码字母表的加密算法,属于 多表密码 的一种简单形式. 为什么 针对单表代替密码容易被频率分析法破解的缺点,人们提出多表代换密码,用一系列(两个以 ...
- 凯撒密码加密解密C语言详细代码
凯撒密码加密解密C语言详细代码 凯撒密码 又叫循环移位密码.它的加密方法,就是将明文中的每个字母用此字符在字母表中后面第k个字母替代.它的加密过程可以表示为下面的函数: E(m)=(m+k) mod ...
- 凯撒密码加密解密——Java代码(密码学)
凯撒密码加密解密--Java代码(密码学) 凯撒密码: 恺撒密码(英语:Caesar cipher),或称恺撒加密.恺撒变换.变换加密,是一种最简单且最广为人知的加密技术.它是一种替换加密的技术,明文 ...
- VIP品会密码加密解密与登录
上班都快一周了,一直想更新,奈何小伙还没有从假期的快乐中缓过来,今天终于耐下心来更新一小篇.抠一下某品会的JS代码,接着使用抠取的JS代码加密密码进行登录.友情提示:为避免不必要的纠纷,本文中所有网址 ...
最新文章
- HTML5 Canvas 绘制佛教万字
- Python3引号创建字符串
- 杂谈——杭州考驾照历程
- leetcode 605. 种花问题(贪心算法)
- Python中的super()简单用法
- salt远程执行python脚本_SaltStack与Python配合实现系统用户自动化管理
- ES6——Promise 对象
- 集训8.19最短路径讲解
- java 算法比较,java几种面消隐算法的比较
- Linux 内核第一宏
- Atitit json序列化工具 JsonParserAtiver 参考 Atitit json序列化原理 序列化是将一个对象变成json格式的字符串,而反序列化是将json格式的字符串变
- 儿童计算机编程课程,少儿编程基础课程介绍
- 【acwing 寒假每日一题(入门组)】day20 火星人
- (Modern Family S01E02) Part 6 JayGloria Jay给Manny修风扇
- 全栈工程师为啥值40W的年薪?
- 第5章-商品服务-品牌管理
- flink yarn-per-job作业提交
- 关于2021/12/17国内bing不能正常访问的解决方法。
- C++:实现量化MarketModels市场模型测试实例
- 计算机等级上机模拟考试,计算机等级考试语言上机模拟试题.doc
热门文章
- PgSQL · 乱入拜年 · 小鸡吉吉和小象Pi吉(PostgreSQL)的鸡年传奇
- DFD图(数据流图)转换至SC图(系统结构图)
- 275.算法设计工具―STL
- Unix/Linux中的read和write函数
- linux 文件操作write详解
- 基于mini2440嵌入式linux上整合一套Domoticz智能家居系统(九)使用domoticz+mosquitto+Android客户端实现控制mini2440上的LED(二)
- 在北京西单图书大厦签名售书
- ROS自定义msg类型及使用
- 魔百和CM311-1a_CH_S905L3A_安卓9.0_纯净线刷固件包
- 【功能安全】【ISO26262】支持过程