2015-11-10 3 views
-1

#Vigenere Cipher EncryptedMessage = "" Mode = "" Keywordcount = 0 #sets все до 0Может кто-нибудь сказать мне, почему мой encrpyt работает, но не мой decrpyt? посмотреть на картинке ниже

while Mode != "encrypt" and Mode != "decrypt": 
    Mode = input('Do you want to encrypt or decrypt a message?') 
    Mode = Mode.lower() 

if Mode == "encrypt": 

    Keyword=input('Please enter the keyword you want to use:') 

    Message=input('Please eneter the message you witsh to encrypt: ') 

    Keywordlength = len(Keyword) 

    for i in range(0, len(Message)):# 

      Messageencrypt = Message[i] 
      Keywordencrypt = Keyword[Keywordcount] 

      if Messageencrypt.isalpha(): 

       if Messageencrypt.isupper(): 

        Messageencrypt = ord(Messageencrypt) 

        Keywordencrypt = Keywordencrypt.upper() 

        Keywordencrypt = ord(Keywordencrypt) - 64 

        CodedMessage = Messageencrypt + Keywordencrypt 

        if CodedMessage > 90: 
         CodedMessage = CodedMessage - 26 

        Encryptedletter = chr(CodedMessage)   


       elif Messageencrypt.islower(): 

        Messageencrypt = ord(Messageencrypt) 

        Keywordencrypt = Keywordencrypt.upper() 

        Keywordencrypt = ord(Keywordencrypt) - 64 

        CodedMessage = Messageencrypt + Keywordencrypt 

        if CodedMessage > 122: 
         CodedMessage = CodedMessage - 26 


       Encryptedletter = chr(CodedMessage) 

      else: 
       Encryptedletter = Messageencrypt 

      EncryptedMessage = EncryptedMessage + Encryptedletter 

      Keywordcount = Keywordcount + 1 

      if Keywordcount >= Keywordlength: 
       Keywordcount = 0 

    print(EncryptedMessage) 


if Mode == "decrypt": 

    Keyword=input('Please enter the keyword you want to use:') 

    Message=input('Please eneter the message you witsh to decrypt: ') 

    Keywordlength = len(Keyword) 

    for i in range(0, len(Message)):# 

      Messageencrypt = Message[i] 
      Keywordencrypt = Keyword[Keywordcount] 

      if Messageencrypt.isalpha(): 

       if Messageencrypt.isupper(): 

        Messageencrypt = ord(Messageencrypt) 

        Keywordencrypt = Keywordencrypt.upper() 

        Keywordencrypt = ord(Keywordencrypt) - 64 

        CodedMessage = Messageencrypt - Keywordencrypt 

        if CodedMessage > 90: 
         CodedMessage = CodedMessage - 26 

        Encryptedletter = chr(CodedMessage)   


       elif Messageencrypt.islower(): 

        Messageencrypt = ord(Messageencrypt) 

        Keywordencrypt = Keywordencrypt.upper() 

        Keywordencrypt = ord(Keywordencrypt) - 64 

        CodedMessage = Messageencrypt - Keywordencrypt 

        if CodedMessage > 122: 
         CodedMessage = CodedMessage - 26 


       Encryptedletter = chr(CodedMessage) 

      else: 
       Encryptedletter = Messageencrypt 

      EncryptedMessage = EncryptedMessage + Encryptedletter 

      Keywordcount = Keywordcount + 1 

      if Keywordcount >= Keywordlength: 
       Keywordcount = 0 

    print(EncryptedMessage) 

программа шифрует должным образом, но не расшифровывает правильно Кто-то объяснить что случилось

This image show what is what happens when i try to decrypt

+0

Добро пожаловать на переполнение стека! Вы предоставили код, но не показали, что должно быть неправильно с ним. Пожалуйста, отредактируйте свой вопрос, укажите пример входов, выходов и ожидаемых результатов. –

ответ

0

Попробуйте это:

#Vigenere Cipher 
EncryptedMessage="" 
Mode="" 
Keywordcount = 0 #sets everything to 0 


while Mode != "encrypt" and Mode != "decrypt": 
    Mode = input('Do you want to encrypt or decrypt a message?') 
    Mode = Mode.lower() 

if Mode == "encrypt": 
    Keyword=input('Please enter the keyword you want to use:') 
    Message=input('Please eneter the message you wish to encrypt: ') 
    Keywordlength = len(Keyword) 
    for i in range(0, len(Message)): 
     Messageencrypt = Message[i] 
     Keywordencrypt = Keyword[Keywordcount] 
     if Messageencrypt.isalpha(): 
      if Messageencrypt.isupper(): 
       Messageencrypt = ord(Messageencrypt) 
       Keywordencrypt = Keywordencrypt.upper() 
       Keywordencrypt = ord(Keywordencrypt) - 64 
       CodedMessage = Messageencrypt + Keywordencrypt 
       if CodedMessage > 90: 
        CodedMessage = CodedMessage - 26 
       Encryptedletter = chr(CodedMessage) 
      elif Messageencrypt.islower(): 
       Messageencrypt = ord(Messageencrypt) 
       Keywordencrypt = Keywordencrypt.upper() 
       Keywordencrypt = ord(Keywordencrypt) - 64 
       CodedMessage = Messageencrypt + Keywordencrypt 
       if CodedMessage > 122: 
        CodedMessage = CodedMessage - 26 
      Encryptedletter = chr(CodedMessage) 
     else: 
      Encryptedletter = Messageencrypt 
     EncryptedMessage = EncryptedMessage + Encryptedletter 
     Keywordcount = Keywordcount + 1 
     if Keywordcount >= Keywordlength: 
      Keywordcount = 0 
    print(EncryptedMessage) 


if Mode == "decrypt": 
    Keyword=input('Please enter the keyword you want to use:') 
    Message=input('Please eneter the message you wish to decrypt: ') 
    Keywordlength = len(Keyword) 
    for i in range(0, len(Message)): 
     Messageencrypt = Message[i] 
     Keywordencrypt = Keyword[Keywordcount] 
     if Messageencrypt.isalpha(): 
      if Messageencrypt.isupper(): 
       Messageencrypt = ord(Messageencrypt) 
       Keywordencrypt = Keywordencrypt.upper() 
       Keywordencrypt = ord(Keywordencrypt) - 64 
       CodedMessage = Messageencrypt - Keywordencrypt 
       if CodedMessage < 65: 
        CodedMessage = CodedMessage + 26 
       Encryptedletter = chr(CodedMessage) 
      elif Messageencrypt.islower(): 
       Messageencrypt = ord(Messageencrypt) 
       Keywordencrypt = Keywordencrypt.upper() 
       Keywordencrypt = ord(Keywordencrypt) - 64 
       CodedMessage = Messageencrypt - Keywordencrypt 
       if CodedMessage < 97: 
        CodedMessage = CodedMessage + 26 
      Encryptedletter = chr(CodedMessage) 
     else: 
      Encryptedletter = Messageencrypt 
     EncryptedMessage = EncryptedMessage + Encryptedletter 
     Keywordcount = Keywordcount + 1 
     if Keywordcount >= Keywordlength: 
      Keywordcount = 0 
    print(EncryptedMessage) 

Эти изменения, которые я сделал в формате дифф:

--- old.py 2015-11-10 14:01:31.000000000 -0500 
+++ new.py 2015-11-10 13:56:52.000000000 -0500 
@@ -54,7 +54,7 @@ 
Keywordencrypt = Keywordencrypt.upper() 
Keywordencrypt = ord(Keywordencrypt) - 64 
CodedMessage = Messageencrypt - Keywordencrypt 
-     if CodedMessage > 90: 
+     if CodedMessage < 65: 
     CodedMessage = CodedMessage + 26 
Encryptedletter = chr(CodedMessage) 
elif Messageencrypt.islower(): 
@@ -62,7 +62,7 @@ 
Keywordencrypt = Keywordencrypt.upper() 
Keywordencrypt = ord(Keywordencrypt) - 64 
CodedMessage = Messageencrypt - Keywordencrypt 
-     if CodedMessage > 122: 
+     if CodedMessage < 97: 
     CodedMessage = CodedMessage + 26 
Encryptedletter = chr(CodedMessage) 
else: 
+0

им не так хорошо на python это мне монт, чтобы закончить это, поэтому я не знаю, что значит, но ах хорошо, я люблю тебя –

+0

Сравните строки 24 и 57 и строки 32 и 65 в моей версии. –

0

вы используете верхнюю границу проверьте свою переменную CodedMessage как в вашем шифровании, так и в расшифровке (то есть, if CodedMessage > 90:). это работает для шифрования, потому что вы ожидаете, что кодированный код ASCII десятичного кода будет больше, чем первоначально, потому что вы добавляете ключ-шифр. Однако, для расшифровывать, вы не добавляете, вы вычитанием ключ:

CodedMessage = Messageencrypt - Keywordencrypt 

, что означает, что вы бы сейчас ожидать CodedMessage быть меньше, чем раньше, что делает верхнюю границу проверки бесполезно. Вы можете изменить свой код:

if CodedMessage < 65: #for upper letters 
if CodedMessage < 97: #for lower letters