实验目的
1、进一步理解维吉尼亚密码的加解密原理
2、进一步理解维吉尼亚密码的缺陷和利用方法
3、提高编程实践能力
实验要求
1、实现维吉尼亚加解密函数
2、破解维吉尼亚加密的密文
实验步骤
1、维吉尼亚加密实现
维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。也就是说,维吉尼亚密码则是由一些偏移量不同的恺撒密码组成。
代码实现:
def encrypt (message,key):
key = key.lower()
non_alpha_count = 0
cipher = ''
for i in range(len(message)):
if message[i].isalpha():
if message[i].isupper():
offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
cipher +=chr(((ord(message[i])-ord('A')+offset) % 26) + ord('A'))
if message[i].islower():
offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
cipher +=chr((ord(message[i])-ord('a')+offset) % 26 + ord('a'))
else:
cipher +=message[i]
non_alpha_count +=1
return cipher
我们来实现一个简单的加密:
结果如下:
2、维吉尼亚密码解密
解密的过程则与加密相反。例如:根据密钥第一个字母t所对应的t行字母表,发现密文第一个字母a位于h列,因而明文第一个字母为h。密钥第二个字母a对应a行字母表,而密文第二个字母e位于此行e列,因而明文第二个字母为e。以此类推便可得到明文。
代码实现:
def decrypt (message,key):
# key = key.lower()
non_alpha_count = 0
cipher = ''
for i in range(len(message)):
if message[i].isalpha():
if message[i].isupper():
offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
cipher +=chr(((ord(message[i])-ord('A')-offset) % 26) + ord('A'))
if message[i].islower():
offset = ord(key[(i-non_alpha_count)%len(key)]) - ord('a')
cipher +=chr((ord(message[i])-ord('a')-offset) % 26 + ord('a'))
else:
cipher +=mess