Loading

维吉尼亚密码的加密解密

维吉尼亚密码的加密解密

原理

拓展的凯撒密码,每一个明文循环对应一个密钥
'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))
posted @ 2022-03-15 23:45  sovo  阅读(559)  评论(0)    收藏  举报