维吉尼亚密码的加密解密
维吉尼亚密码的加密解密
原理
拓展的凯撒密码,每一个明文循环对应一个密钥
'ASDFGQWER'为明文
'ASD'为密钥
对应该关系就是A--A,S--S,D--D,F--A,G--S以此拓展
将明文和密钥在字母表上所对应的数字相加并求模26即得到密文
密文解密,即密文数字减密钥并模26即解密
import string
letters = string.ascii_letters # 26个字母的大小写列表
def encode_s(plaintext, key):
encode = ''
j = 0
for i, value in enumerate(plaintext):
if value.isalpha():
n = 0
n = (letters.find(value) + letters.find(key[(i - j) % len(key)])) % 26
if value.isupper():
n += 26
encode += letters[n]
else:
encode += value
j += 1
return encode
def decode_s(cipertext, key):
decode = ''
j = 0
for i, value in enumerate(cipertext):
if value.isalpha():
n = 0
n = (letters.find(value) - letters.find(key[(i - j) % len(key)])) % 26
if value.isupper():
n += 26
decode += letters[n]
else:
decode += value
j += 1
return decode
if __name__ == "__main__":
plaintext = "BTTACKATDAFG"
key = 'LIMN'
cipertext = encode_s(plaintext, key)
print(cipertext)
print(decode_s(cipertext,key))

浙公网安备 33010602011771号