I am a student in school and am currently doing a Caesar Cipher on Python as a programming assignment. The first task was to create a program that asked the user for a message, offset and the code would either encrypt or decrypt based on the user's decision. I'm not experienced at all in Python and thus I am not the best at it so here is my code that is rather simple:
message = input("What would you like your message to be? ")
key = int(input("What would you like your offset to be? "))
count = 0
while count == 0:
mode = str(input("Would you like to encrypt or decrypt? "))
if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e":
count = count + 1
elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d":
count = count + 1
else:
print("You need to enter in a valid answer. Please try again. ")
letters = "abcdefghijklmnopqrstuvwxyz"
translated_message = ""
for character in message:
if character in letters:
number = letters.find(character)
if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e":
number = number + key
elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d":
number = number - key
if number >= len(letters):
number = number - len(letters)
elif number < 0:
number = number + len(letters)
translated_message = translated_message + letters[number]
else:
translated_message = translated_message + character
print(translated_message)
Now the next task is to create a Caesar Cipher with a keyword which repeats itself as many times as needed to fit the message that the user input. So if I had a user input "the password" as their message and "key" as their keyword then key would be repeated as many times to fit the text, and the program should add the numerical values together to create the new encrypted or decrypted message. For instance, the first letter of the translated message would be Y as 10(K) + 15(P) = 25(Y).
I have attempted to expand on my original code by adding this feature but I am unable to do so. If anyone were able to help me out in using this code and expanding on it to add this feature, that would be greatly appreciated. Thanks for any help.
This should work :
message = input("What would you like your message to be? ")
key = input("What would you like your offset to be? ")
count = 0
while count == 0:
mode = str(input("Would you like to encrypt or decrypt? "))
if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e":
count = count + 1
elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d":
count = count + 1
else:
print("You need to enter in a valid answer. Please try again. ")
letters = "abcdefghijklmnopqrstuvwxyz"
translated_message = ""
index = 0
for character in message:
if character in letters:
number = letters.find(character)
if mode == "encrypt" or mode == "Encrypt" or mode == "E" or mode == "e":
number = number + (ord(key[index]) - ord('a'))
elif mode == "decrypt" or mode == "Decrypt" or mode == "D" or mode == "d":
number = number - (ord(key[index]) - ord('a'))
index = index+1
index = index % len(key)
if number >= len(letters):
number = number - len(letters)
elif number < 0:
number = number + len(letters)
translated_message = translated_message + letters[number]
else:
translated_message = translated_message + character
print(translated_message)
Also note that : 10(K) + 15(P) = 25(Z), because indexing starts from 0.