-1

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

the program encrypts properly but does not decrypt properly Somebody explain whats wrong

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

  • Welcome to Stack Overflow! You've provided the code, but haven't shown what's supposed to be wrong with it. Please [edit] your question provide example inputs, outputs and expected outputs. – Artjom B. Nov 10 '15 at 17:59

2 Answers2

0

you are using a higher bound check for your CodedMessage variable in both your encrypt and decrypt (ie, if CodedMessage > 90:). this works for encrypt because you expect the coded message ASCII decimal code to be greater than it originally was because you are adding the keyencrypt. however, for your decrypt, you are not adding, you are subtracting the key:

CodedMessage = Messageencrypt - Keywordencrypt

which means that you would now expect the CodedMessage to be smaller than before, which makes a higher bound check useless. You can then change your code to:

if CodedMessage < 65: #for upper letters
if CodedMessage < 97: #for lower letters
R Nar
  • 5,465
  • 1
  • 16
  • 32
0

Try this:

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

These are the changes I made in diff format:

--- 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: