Vigenere密码Python程序

Vigenere密码Python程序,python,python-3.x,encryption,padding,vigenere,Python,Python 3.x,Encryption,Padding,Vigenere,你如何编写这个维格纳密码 我正在做一个问题,我加密和解密一个凯撒和维格纳密码,我很难想出它。我不允许更改任何代码。我只能在定义下添加代码。我在github上有这个 我得到了更多的信息: 关于Vigenere密码: Vigenere密码使用的密钥是字符串。更重要的是,它必须是从纯文本中提取的子字符串。假设密钥为“Bob”,由于“Bob”的长度小于纯文本,因此需要在加密之前将密钥填充到与纯文本相同的长度: 第一个字母“A”由“B”加密。这意味着“B”在查找列表中的索引为13,这样“A”将向下移动1

你如何编写这个维格纳密码

我正在做一个问题,我加密和解密一个凯撒和维格纳密码,我很难想出它。我不允许更改任何代码。我只能在定义下添加代码。我在github上有这个

我得到了更多的信息:

关于Vigenere密码: Vigenere密码使用的密钥是字符串。更重要的是,它必须是从纯文本中提取的子字符串。假设密钥为“Bob”,由于“Bob”的长度小于纯文本,因此需要在加密之前将密钥填充到与纯文本相同的长度:

第一个字母“A”由“B”加密。这意味着“B”在查找列表中的索引为13,这样“A”将向下移动13个位置并成为“B”。另一个例子是第二个字母“l”由“o”加密,该字母的索引基于查找列表为7。因此,“l”将下移7个位置,并在加密后变为“o”。实现Vigenere密码的加密和解密方法。encrypt方法将纯文本作为输入,并生成加密的对应项cipher_text。decrypt方法解密密码文本并返回纯文本

我和维格纳之间真的有些问题。当代码出现时 对于if-name-main,此站点上的显示不正确,但假定它是正确的。实际代码应该如下-->if\u name\uuu==“main”:

我试过很多东西。我知道我必须按键盘,我相信这是我的问题

纯文本 根据工会首席谈判代表的说法,plain_text=“联合汽车工人工会和通用汽车之间的谈判”已经恶化,这意味着汽车行业几十年来最长的罢工不会立即结束。在会谈受挫之前,双方报告了几天的进展。他们希望达成一项为期四年的新协议。美国汽车工人联合会(United Auto Workers)谈判小组副主席特里·迪特斯(Terry Dittes)周日中午致函会员,表示工会认为该公司最新的合同提案完全不能被工会接受。”

def查找列表(文本):
返回列表(文本)
类别密码:
字母表=列表('abcdefghijklmnopqrstuvxyz')
def uuu init uuuu(self,key):
断言(键>0,类型(键)==int)
self.key=key
def加密(自身、纯文本):
密码文本=查找列表生成(纯文本)
加密文本=“”
对于密文中的字母:
字母=字母。下()
如果字母为self.alphabet:
加密文本+=self.alphabet[(self.alphabet.index(字母)+self.key)%26]
其他:
加密文本+=字母
self.cipher\u text=加密\u text
def解密(自身、纯文本):
密码文本=查找列表生成(纯文本)
解密_文本=“”
对于密文中的字母:
如果字母为self.alphabet:
解密_text+=self.alphabet[(self.alphabet.index(字母)-self.key)%26]
其他:
解密_text+=字母
返回解密文本
维格纳类密码:
定义初始化(自、键、查找列表):
断言(类型(键)=str)
self.key=key
def加密(自身、纯文本):

断言(len(self.key)你已经提供了一个一般性的问题陈述,你的具体问题是什么?你尝试了什么,你的尝试出了什么问题?注意堆栈溢出,并注意你学校的政策。我真的不知道从哪里开始。我不理解填充密钥。这个问题不是公开的吗?
def look_up_list_gen(text):
    return list(text)  


class CaesarCipher:
    alphabet = list('abcdefghijklmnopqrstuvwxyz')

    def __init__(self, key):
        assert(key > 0 and type(key) == int)
        self.key = key


    def encrypt(self, plain_text):
        cipher_text = look_up_list_gen(plain_text)
        encrypt_text = ''
        for letter in cipher_text:
            letter = letter.lower()
            if letter in self.alphabet:
                encrypt_text += self.alphabet[(self.alphabet.index(letter) + self.key) % 26 ]
            else:
                encrypt_text += letter
        self.cipher_text = encrypt_text




    def decrypt(self, plain_text):
        cipher_text = look_up_list_gen(plain_text)
        decrypt_text = ''

        for letter in cipher_text:
            if letter in self.alphabet:
                decrypt_text += self.alphabet[(self.alphabet.index(letter) - self.key) % 26 ]
            else:
                decrypt_text += letter

        return decrypt_text




class VigenereCipher:
    def __init__(self, key, look_up_list):
        assert(type(key) == str)
        self.key = key



    def encrypt(self, plain_text):
        assert(len(self.key) <= len(plain_text))



    def decrypt(self):
        assert(len(self.key) <= len(plain_text))



if __name__ == "__main__":
    caesar = CaesarCipher(3)
    caesar.encrypt(look_up_list_gen(plain_text))
    print("Encrypted text: ",caesar.cipher_text)
    print("""
                ---------------------------- 
    """)
    print("Decrypted text: ",caesar.decrypt(caesar.cipher_text).capitalize())

    vigenere = VigenereCipher(plain_text[:5],look_up_list_gen(plain_text))
    vigenere.encrypt(plain_text)
    print("Encrypted text: ",vigenere.cipher_text)
    print("Decrypted text: ",vigenere.decrypt())