如何将另一个密钥添加到 vigenere 密码中

Posted

技术标签:

【中文标题】如何将另一个密钥添加到 vigenere 密码中【英文标题】:How to add another key into a vigenere cipher 【发布时间】:2016-02-07 14:44:16 【问题描述】:

我正在编写一个 vigenere 密码,并想添加另一个密钥。这进一步加密了我输入的文本。谁能解释如何做到这一点?

LETTERS = 'ZABCDEFGHIJKLMNOPQRSTUVWXY'
def main():
    myMode = input("Encrypt 'e' or Decrypt 'd': ")
    myMessage = input('What text would you like to encrypt: ')
    myKey = input('Enter your key: ')
    myKey2 = input('Enter your second key: ')
    if myMode == 'encrypt' or myMode == 'e':
        translated = encryptMessage(myKey, myMessage)
    elif myMode == 'decrypt' or myMode == 'd':
        translated = decryptMessage(myKey, myMessage)
    print('%sYour Message: ' % (myMode.title()))
    print(translated)
    print()

def encryptMessage(key, message):
    return translateMessage(key, message, 'encrypt')

def decryptMessage(key, message):
    return translateMessage(key, message, 'decrypt')

def translateMessage(key, message, mode):
    translated = []

    keyIndex = 0
    key = key.upper())

    for symbol in message: 
        num =LETTERS .find(symbol.upper())
        if num != -1: 
            if mode == 'encrypt':
                num += LETTERS .find(key[keyIndex]) 
            elif mode == 'decrypt':
                num -= LETTERS .find(key[keyIndex])

            num %= len(LETTERS)

            if symbol.isupper():
                translated.append(LETTERS[num])
            elif symbol.islower():
                translated.append(LETTERS[num].lower())

            keyIndex += 1 
            if keyIndex == len(key):
                keyIndex = 0
        else:
            translated.append(symbol)
    return ''.join(translated)
if __name__ == '__main__':
    main()

我已经创建了变量,但不确定在哪里使用它们。任何帮助都会很棒。

【问题讨论】:

【参考方案1】:

translateMessage()开头的key可以改成keys。然后检查keys 是否为字符串。 (if isinstance(keys, str)) 如果是,请说keys = [keys] 将其列为列表。然后,将函数的其余部分放入 for 循环中,如下所示:for key in keys:

【讨论】:

以上是关于如何将另一个密钥添加到 vigenere 密码中的主要内容,如果未能解决你的问题,请参考以下文章

在 Vigenere 密码方法中使用多个密钥进行加密是不是安全?

如何在 vigenere cipherkey cs50 pset2 中重用(循环)密钥

使用从文件中读取明文的 Vigenere 密码进行加密 (JAVA)

Python中的Vigenere密码不适用于大写/小写字母转换

我的 CS50 Vigenere 密码程序有啥问题?

加密 Vigenere 密码