【问题标题】:Vigenere Cipher Python giving foreign characters instead of EnglishVigenere Cipher Python 给出外来字符而不是英文
【发布时间】:2015-12-06 18:17:17
【问题描述】:

此代码旨在使用 Vigenere Cipher 技术进行加密和解密,当我选择加密并输入我的关键字和文本时,结果是一堆外来字符一次打印在单独的行上,如下所示: 大号 罗 娄等。此外,当我选择解密时,打印结果是一个错误,指出“打印索引超出范围”。这两个错误我都不知道如何解决,如果有任何帮助,我将不胜感激。

#encryption 
def encrypt():
    crypt = ''
    key_phrase = raw_input("Please enter a key phrase to encrypt by: ")
    key_text = raw_input("Please enter a piece of text to encrypt: ")
    if len(key_text) == 0: 
        print("Key must be of length 1 or more."); exit()
    if not key_text.isalpha() or not key_phrase.isalpha():
        print("Both text and key must be composed of letters only."); exit()
    for letters in range(0, len(key_text)):
        new = ord(key_text[letters]) + ord(key_text[letters%len(key_text)]) - 65
        if new > 90:
            new -= 26
        crypt += chr(new)
        print crypt

#decryption
def decrypt():
    decrypt = ''
    _key_phrase = raw_input("Please enter a key phrase to decrypt by: ")
    _key_text = raw_input("Please enter a piece of text to include: ")
    if len(_key_text) == 0: 
        print("Key must be of length 1 or more."); exit()
    if not _key_text.isalpha() or not _key_phrase.isalpha():
        print("Both text and key must be composed of letters only."); exit()
    for letters in range(0, len(_key_text)):
        new = ord(_key_phrase[letters]) - ord(_key_text[letters%len(_key_text)]) + 65
        if new < 65:
            new += 26
        decrypt == chr(new)
        print decrypt

#asking the user to enter a or b for en/decryption
choice = raw_input("Please enter either 'a' for encryption or 'b' for     decryption: ")
if choice == 'a':
    print encrypt()
else:
    print decrypt()     

【问题讨论】:

  • 您在哪几行得到这些错误?
  • 我不确定这就是为什么我来这里看看是否有人知道
  • 能否请您添加错误信息
  • }テマwヒ 这是使用 hi 作为关键短语和 louis 作为文本(加密)和解密的结果,我得到了超出范围的字符串索引

标签: python python-2.7 encryption vigenere


【解决方案1】:

您使用大写的 ASCII 代码,但您的密钥和文本是小写的。

可能的解决方案:

  1. 在输入过程中对键和文本使用大写。

  2. 通过key_phrase = key_phrase.upper()将键和文本设置为大写

  3. 使用小写的 ASCII 代码而不是大写。例如范围从 97 到 122,而不是 65 到 90。

这会起作用(尽管它不是最好的解决方案):

在加密中:

key_phrase = raw_input("Please enter a key phrase to encrypt by: ")
key_phrase = key_phrase.upper()
key_text = raw_input("Please enter a piece of text to encrypt: ")
key_text = key_text.upper()

在解密中:

_key_phrase = raw_input("Please enter a key phrase to decrypt by: ")
_key_phrase = _key_phrase.upper()
_key_text = raw_input("Please enter a piece of text to include: ")
_key_text = _key_text.upper()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多