diff --git a/ciphers/caesar_cipher.py b/ciphers/caesar_cipher.py index a53dc5857..6cd35e73d 100644 --- a/ciphers/caesar_cipher.py +++ b/ciphers/caesar_cipher.py @@ -1,45 +1,68 @@ -from __future__ import print_function -# The Caesar Cipher Algorithm +import sys +def encrypt(strng, key): + encrypted = '' + for x in strng: + indx = (ord(x) + key) % 256 + if indx > 126: + indx = indx - 95 + encrypted = encrypted + chr(indx) + return encrypted + + +def decrypt(strng, key): + decrypted = '' + for x in strng: + indx = (ord(x) - key) % 256 + if indx < 32: + indx = indx + 95 + decrypted = decrypted + chr(indx) + return decrypted + +def brute_force(strng): + key = 1 + decrypted = '' + while key <= 94: + for x in strng: + indx = (ord(x) - key) % 256 + if indx < 32: + indx = indx + 95 + decrypted = decrypted + chr(indx) + print("Key: {}\t| Message: {}".format(key, decrypted)) + decrypted = '' + key += 1 + return None + def main(): - message = input("Enter message: ") - key = int(input("Key [1-26]: ")) - mode = input("Encrypt or Decrypt [e/d]: ") + print('-' * 10 + "\n**Menu**\n" + '-' * 10) + print("1.Encrpyt") + print("2.Decrypt") + print("3.BruteForce") + print("4.Quit") + while True: + choice = input("What would you like to do?: ") + if choice not in ['1', '2', '3', '4']: + print ("Invalid choice") + elif choice == '1': + strng = input("Please enter the string to be ecrypted: ") + while True: + key = int(input("Please enter off-set between 1-94: ")) + if key in range(1, 95): + print (encrypt(strng, key)) + main() + elif choice == '2': + strng = input("Please enter the string to be decrypted: ") + while True: + key = int(input("Please enter off-set between 1-94: ")) + if key > 0 and key <= 94: + print(decrypt(strng, key)) + main() + elif choice == '3': + strng = input("Please enter the string to be decrypted: ") + brute_force(strng) + main() + elif choice == '4': + print ("Goodbye.") + sys.exit() - if mode.lower().startswith('e'): - mode = "encrypt" - elif mode.lower().startswith('d'): - mode = "decrypt" - - translated = encdec(message, key, mode) - if mode == "encrypt": - print(("Encryption:", translated)) - elif mode == "decrypt": - print(("Decryption:", translated)) - -def encdec(message, key, mode): - message = message.upper() - translated = "" - LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - for symbol in message: - if symbol in LETTERS: - num = LETTERS.find(symbol) - if mode == "encrypt": - num = num + key - elif mode == "decrypt": - num = num - key - - if num >= len(LETTERS): - num -= len(LETTERS) - elif num < 0: - num += len(LETTERS) - - translated += LETTERS[num] - else: - translated += symbol - return translated - -if __name__ == '__main__': - import doctest - doctest.testmod() - main() +main()