Vigenere密码加密解密原理

原创 2017年01月03日 21:59:05

先从简单的单表代替开始说起:要知道,在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 info

flag = ''
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 = 4
	for 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个数字左右,然后大概看下他们的公因数,一一分析,或者结合其他的方法来进行密钥长度的判断以及下一步计算

接下来就是确定密钥

noip2012 vigenere密码 (模拟)

P1778vigenere密码 Accepted 标签:模拟NOIP提高组2012 描述 16世纪法国外交家Blaise de ...
  • yuyanggo
  • yuyanggo
  • 2015年10月02日 22:18
  • 905

Vigenere密码

Vigenere密码技术: 在单字符单表替换密码中,明文中的字符与密文中字符是一一对应的(在明文表中的字符也存在于在密文表中), 明文中字符的统计特性在密文中没有得到改变。 单字符多表替...
  • only06
  • only06
  • 2017年01月30日 22:03
  • 758

【Noip2012】Vigenere密码

【Noip2012】Vigenere密码描述:16世纪法国外交家Blaise de Vigenère设计了一种多表密码加密算法——Vigenère密码。Vigenère密码的加密解密算法简单易用,且破...
  • AsamaKou
  • AsamaKou
  • 2017年08月21日 09:40
  • 204

Vigenere 密码破译

信息安全原理 作业1,第2题 Vignere:ktbueluegvitnthuexmonveggmrcgxptlyhhjaogchoemqchpdnetxupbqntietiabpsmaoncnwvo...
  • u013046245
  • u013046245
  • 2014年03月06日 12:32
  • 2223

Vigenere算法c语言的简单实现

  • 2009年10月28日 20:53
  • 500B
  • 下载

vigenere密码的加密和解密过程

  • 2009年06月01日 20:16
  • 768KB
  • 下载

维吉尼亚密码器/加解密/维吉尼亚方阵 Vigenere Cipher & Vigenere Square

  • 2016年09月17日 16:16
  • 241KB
  • 下载

(3)Vigenere密码算法的Java实现

Vigenère密码是多表代换密码中的一种,其思想是:明文的每个字母使用不同k的凯撒加密。 我们可以构造一个维吉尼亚密码表的矩阵,最左边为密钥字母,最上面为明文,加密过程很简单:给定密钥字母x和明文...
  • Fighting_No1
  • Fighting_No1
  • 2016年03月08日 16:39
  • 2691

[古典密码]:Vigenere cipher 维吉尼亚密码

维吉尼亚密码 Casear加密算法的升级版: 将26个Casear密表合成一个,见下表: 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 A -...
  • ALDNOAH_ZERO
  • ALDNOAH_ZERO
  • 2016年09月10日 14:55
  • 1334

破解 维吉尼亚(vigenere) 密码

from: http://blog.chinaunix.net/u1/41420/showart_390613.html  作者: dorainm邮箱: dorainm@gmail.com    维吉...
  • iltaek
  • iltaek
  • 2009年05月03日 17:32
  • 5140
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Vigenere密码加密解密原理
举报原因:
原因补充:

(最多只允许输入30个字)