首先必然得有维吉尼亚密码的储备知识
维吉尼亚密码是多表代替密码
举一个例子,明文是aaa,密钥是key(俺举的明文很特殊,是为了方便理解)
则密文就是key
即第一个明文字符对应到ak的表,第二个则是ae的表,依此可以理解第三个
如果明文比密钥大的话,例如aaaa,第四个应该用ak的表
反应到代码上配合ASCII码
就是密文=明文+密钥-A/a(A和a取决于整个的大小写问题)
def weijiniyaencode(str,key):#str和key应该同是大写字母或同是小写字母
str_list=list(str)
key_list=list(key)
loop=len(key_list)
k=0
for i in range(len(str_list)):
if loop==1:
j=0
else:
j=k%loop
if ord(str_list[i]) >= 65 and ord(str_list[i]) <= 90:#用来筛选大写字母
if ord(str_list[i])+ord(key_list[j])-65>90:#考虑超出Z
str_list[i] = chr(ord(str_list[i]) +ord(key_list[j]) -65-26)
else:
str_list[i] = chr(ord(str_list[i]) + ord(key_list[j])-65)
elif ord(str_list[i]) >= 97 and ord(str_list[i]) <= 122:#用来筛选小写字母
if ord(str_list[i])+ord(key_list[j])-97 >122:
str_list[i] = chr(ord(str_list[i]) +ord( key_list[j])-97-26)
else:
str_list[i]= chr(ord(str_list[i]) + ord(key_list[j])-97)
k+=1
str_encode=''.join(str_list)
return str_encode
if __name__ == '__main__':
str1=weijiniyaencode('z a','z')
print(str1)