Vigenere密码Python程序
你如何编写这个维格纳密码 我正在做一个问题,我加密和解密一个凯撒和维格纳密码,我很难想出它。我不允许更改任何代码。我只能在定义下添加代码。我在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)周日中午致函会员,表示工会认为该公司最新的合同提案完全不能被工会接受。”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
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())