python - Vigenere 密码 Python 程序
问题描述
你如何编程这个 Vigenere 密码?
我正在做一个问题,我加密和解密 Caesar 和 Vigenere 密码并且很难想出它。我不允许更改任何代码。我只能在定义下添加代码。我在 github 上有这个。
https://github.com/michaelschmitt39/encryption
我得到的更多信息:
关于 Vigenere 密码: Vigenere 密码使用的密钥是一个字符串。更重要的是,它必须是从纯文本中提取的子字符串。假设密钥是“Bob”,因为“Bob”的长度小于明文,所以需要在加密前将密钥填充到与明文相同的长度:
第一个字母“A”由“B”加密。这意味着“B”在查找列表中的索引为 13,因此“A”将向下移动 13 个位置并变为“b”。另一个例子是第二个字母“l”被“o”加密,基于查找列表的索引为7。因此,“l”将下移 7 个位置,加密后变为“o”。实现 Vigenere 密码的加密和解密方法。encrypt 方法将纯文本作为输入,并生成名为 cipher_text 的加密副本。解密方法解密 cipher_text 并返回纯文本。
我真的对 Vigenere 有一些问题。当代码显示为 if-name-main 时,在此站点上它显示不正确,但假定它是正确的。实际代码应如下所示 --> if__name__=="main":
我已经尝试了很多东西。我知道我必须垫钥匙,我相信这是我的问题。
纯文本
plain_text = “美国汽车工人工会和通用汽车之间的谈判“已经变得更糟,根据工会的首席谈判代表,这表明汽车行业数十年来最长的罢工不会立即结束。几天来双方报告取得进展后,谈判遭遇挫折。他们希望达成一项新的四年协议。美国汽车工人工会谈判小组副主席特里·迪特斯(Terry Dittes)周日中午致信会员,称工会认为该公司最新的合同提案完全不能被工会接受。”
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())
解决方案
推荐阅读
- node.js - 无法使用 Angular Universal 和 Firebase 函数访问 Cloud Firestore 后端
- python - 如何将通过比例获得的新值传输到另一个函数?
- asp.net-core-webapi - WebApi项目中如何通过asp.net核心样板框架实现依赖注入
- c++ - 精确模板参数上的 C++ 重载冲突
- reactjs - 选项选择的道具或状态
- scala - Monix Observable groupBy 大量没有内存泄漏的键
- android-studio - mupdf 为 android 构建,多个目标模式
- android - 在单元测试中调用 Dispatchers.setMain() 时出错
- mariadb - 如何将json字段拆分为多行?
- javascript - 如何在另一个屏幕中访问 asyncStorage 的密钥