2015-09-10 26 views
2

此代碼旨在使用Vigenere密碼技術進行加密和解密,當我選擇加密並輸入我的關鍵字和文本時,結果是一次打印一組外來字符就像這樣的個人行: L Lo lou等等。另外,當我選擇解密時,打印結果是一個錯誤,指出'打印索引超出範圍'。這兩個錯誤我不知道如何解決,我會非常感激的任何幫助。Vigenere密碼Python給予外國字符而不是英文

#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()  
+0

在哪些行中得到這些錯誤? –

+0

我不確定這是爲什麼我來這裏看看是否有人知道 –

+0

你能不能請添加錯誤信息 –

回答

2

您使用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()