原理:
维吉尼亚密码:是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。
维吉尼亚密码的基本工作原理如下:
- 加密前,需要有一个关键词(key),这个关键词会被重复或扩展至与明文长度相同。
- 明文和扩展后的关键词按字符对应相加(这里所说的“加”是指在字母表上按照一个固定长度进行循环移位,类似于凯撒密码的操作)。
- 每一对字符相加的过程实质上是对字母表上的位置进行逐个异或(或者说是模26加法,对于26字母的英语字母表而言)。
- 结果就是得到的密文。
举例来说,如果关键词是"KEY",则对应的数字化密钥k=(10, 4, 24),待加密明文是"HELLO",首先把明文字母转换为数字,然后把明文字母每3个一组,使用密钥字进行模26下的加密操作。
则加密过程是:
- H(7) + K(10) = R(17)
- E (4)+ E(4) = I(8)
- L (11)+ Y(24) = J(9)
- L (11)+ K(10) = V(21)
- O(14) + E (4)= S(18)
所以,密文就是"RIJVS"。
加密
def weiji(ming, key):
strlen1 = len(ming)
strlen2 = len(key)
mi = ""
for i in range(strlen1):
j = i % strlen2
k = ord(ming[i]) + ord(key[j]) # 取明文与密钥相加后的值
# 排除空格
if ming[i] == ' ':
mi += ' '
i += 1
# 小写字母加密
elif 'a' <= ming[i] <= 'z':
mi += chr((k - 194) % 26 + 65)
# 大写字母加密
elif 'A' <= ming[i] <= 'Z':
mi += chr((k - 130) % 26 + 65)
return mi
Ming = input('请输入明文:')
Key = input('请输入密钥:')
print(weiji(Ming, Key))
结果: