📅  最后修改于: 2023-12-03 15:22:35.127000             🧑  作者: Mango
Vigenere密码是一种多字母替换密码,它使用一个单词作为密钥,然后将密钥中每个字母按照顺序和输入的明文一一对应,产生密文。
以下是如何在Python中实现具有所有可打印字符的Vigenere密码:
import string
# 生成可打印字符列表
all_chars = string.printable[:-5] # 去除控制字符和空格
n_chars = len(all_chars)
def vigenere(text, key, mode='e'):
"""
Vigenere密码加密/解密函数。
参数:
text - 明文/密文(字符串)
key - 密钥(字符串)
mode - 加密/解密模式,取值为'e'(加密)或'd'(解密),默认为加密模式。
返回值:
密文/明文(字符串)
"""
res = ''
j = 0
for i, c in enumerate(text):
if c not in all_chars:
continue
k = all_chars.find(key[j])
if mode == 'd':
k = n_chars - k
res += all_chars[(all_chars.find(c) + k) % n_chars]
j = (j + 1) % len(key)
return res
# 测试
text = "hello, world! 123"
key = "password"
cipher = vigenere(text, key) # 加密
plain = vigenere(cipher, key, mode='d') # 解密
assert text == plain, 'Vigenere加密/解密失败'
此代码可将可打印字符表作为密钥字母表,并使用了“循环密钥”的思想。