📜  具有所有可打印字符的vigenere密码python(1)

📅  最后修改于: 2023-12-03 15:22:35.127000             🧑  作者: Mango

具有所有可打印字符的vigenere密码python

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加密/解密失败'

此代码可将可打印字符表作为密钥字母表,并使用了“循环密钥”的思想。