def vigenere_en(ptext, vk): result = "" ptext = ptext.upper() vk = vk.upper() kl = len(vk) ## key length for i in range(len(ptext)): ch = ptext[i] if 32 <= ord(ch) <= 47: result += ch elif 65 <= ord(ch) <= 90: shift = (ord(vk[i % kl]) - ord('A')) % 26 result += chr((ord(ch) - ord('A') + shift) % 26 + ord('A')) else: result += ch return result def vigenere_de(ctext, vk): result = "" ctext = ctext.upper() vk = vk.upper() kl = len(vk) for i in range(len(ctext)): ch = ctext[i] if 32 <= ord(ch) <= 47: result += ch elif 65 <= ord(ch) <= 90: shift = (ord(vk[i % kl]) - ord('A')) % 26 result += chr((ord(ch) - ord('A') - shift + 26) % 26 + ord('A')) else: result += ch return result def autokey_en(ptext, ak): result = "" ptext = ptext.upper() current_key = ak for i in range(len(ptext)): ch = ptext[i] if 32 <= ord(ch) <= 47: result += ch elif 65 <= ord(ch) <= 90: shift = (current_key - ord('A')) % 26 cipher_char = chr((ord(ch) - ord('A') + shift) % 26 + ord('A')) result += cipher_char current_key = ord(cipher_char) else: result += ch return result def autokey_de(ctext, ak): result = "" ctext = ctext.upper() current_key = ak for i in range(len(ctext)): ch = ctext[i] if 32 <= ord(ch) <= 47: result += ch elif 65 <= ord(ch) <= 90: shift = (current_key - ord('A')) % 26 plain_char = chr((ord(ch) - ord('A') - shift + 26) % 26 + ord('A')) result += plain_char current_key = ord(plain_char) else: result += ch return result def operator(argument,ptext,ak,vk): match argument: case '1': print("Vigenere Cipher") print("Plaintext: ", ptext) print("Vigenere Key: ", vk) ctext = vigenere_en(ptext, vk) print("Ciphertext: ", ctext) print("Decrypted Text: ", vigenere_de(ctext, vk)) case '2': print("Autokey Cipher") print("Plaintext: ", ptext) print("Auto Key: ", ak) ctext = autokey_en(ptext, ak) print("Ciphertext: ", ctext) print("Decrypted Text: ", autokey_de(ctext, ak)) case '3': print("Goodbye") exit() case _: print("Invalid Choice, please try again.") def main(): ptext = input("Kindly enter your desired plaintext: ") vk = input("Kindly enter the Vigenere Key: ") ak = int(input("Kindly enter the Autokey: ")) print("Welcome to the Autokey cipher system.") print("Enter your choice of algorithm") print("1. Vigenere Cipher") print("2. Autokey Cipher") print("3. Exit") while True: op = input("Enter your choice of operation: ") operator(op, ptext, ak, vk) if __name__ == '__main__': main()