维吉尼亚作为古典密码,本身的加解密并不是很难,因此也就有了这篇文章~
下面初步解释下维吉尼亚密码的加密原理,假设现在有明文‘a’,加密密钥为‘b’,然后我们参照上面的维吉尼亚密码表进行加密,在a行的b列即为我们加密过后的密文,在这里我们的密文即为‘b’。同理,现在加入我们有密文和密钥,需要我们进行解密,同样我们假设密文为‘g’,加密密钥为‘d’,那么我们可以在表中的d列寻找‘g’,我们可以看到d行的d列即为‘g’,当然这里行数与列数相同纯属巧合,总的来说我们还是需要借助这个表来进行解密。
同时给出的密钥不一定与密文的长度相等,这时候我们就需要给密钥进行循环补位,假设密钥为‘abc’,密文长度为10,那么我们密钥也应该补位为10位,补位后的密钥为‘abcabcabca’。
在进行维吉尼亚密码加密时,我们可以总结规律:密钥虽然为字母,但是我们可以计算其在字母表中的顺位,同时如果给明文加密,总是以明文为第一位,这里就跟凯撒密码一样,以明文为基准,密钥的顺位作为偏移量,从而可以计算出密文。
下面附上维吉尼亚密码加密的源程序(环境python2.7):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#-*-coding:utf-*-
import string
crypto=‘BLOCKCIPHERDESIGNPRINCIPLE’
crypto=crypto.lower()
#print crypto
#这里的crypto为明文,不为密文!
password=‘COMPUTER’
pwd=”
num1=len(crypto)
num2=len(password)
for i in range(num1/num2):
pwd+=password
pwd+=password[:num1%num2]
pwd=pwd.lower()
#print pwd
#给密钥循环补位
final=”
for i in range(len(pwd)):
num=ord(pwd[i])–ord(‘a’)
#计算偏移量
num=ord(crypto[i])+num
#得到加密后的ascii码值
if num>122:
num-=26
#检查是否超过‘z’
final+=chr(num)
print final.upper()
|
这是一篇受密码保护的文章,您需要提供访问密码: 密码: 相关推荐: 逆向破解的入门题目我选取了两条实验吧里的逆向题目,题目不是很难,对于刚刚入门逆向的人来说,我觉得十分有用,由于自身逆向水平有限,有很多地方自己也是一知半解,不多说,开始我的表演~ …
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
喜欢就支持一下吧
请登录后发表评论
注册