Vigènere密码输出包括原始消息

时间:2015-06-25 13:33:29

标签: python encryption vigenere

我对python很新,并且在使用vigenere密码程序工作时遇到了一些麻烦。该程序将接收消息和关键字,并允许用户根据给定的信息加密或解密消息。我已添加以下代码。

LETTERS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

def main():
    myMessage = input("Message:")
    myKey = input("Key:")
    myMode = input("Encrypt or decrypt:")

    if myMode == 'encrypt':
        translated = encryptMessage(myKey, myMessage)
    elif myMode == 'decrypt':
        translated = decryptMessage(myKey, myMessage)

    print('%sed message:' % (myMode.title()))
    print(translated)

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()

当我运行该程序时,它会出现这个:

Message:hello
Key:pizza
Encrypt or decrypt:encrypt
Encrypted message:
whmeklklo

当它加密信息时,它包括来自原始消息的字母以及加密的字母。关于如何解决这个问题,我有点难过。

2 个答案:

答案 0 :(得分:1)

您要在新字符串中添加原始字符:

else:
    translated.append(symbol)

如果删除它,它应该可以工作。

编辑:你使用字符串的方式也有点尴尬,这是一个新版本的翻译,看起来好一点:

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 += LETTERS[num]
            elif symbol.islower():
                translated += LETTERS[num].lower()

            keyIndex += 1
            if keyIndex == len(key):
                keyIndex = 0

    return translated

答案 1 :(得分:0)

如果我理解了您的要求,那么您可以看到您正在使用此代码将原始符号添加回翻译中:

        else:
            translated.append(symbol)