def vigenere_en(ptext, vk): result = [] ptext = ptext.upper() vk = vk.upper() kl = len(vk) for i, ch in enumerate(ptext): if ch.isalpha(): shift = (ord(vk[i % kl]) - ord('A')) % 26 result.append(chr((ord(ch) - ord('A') + shift) % 26 + ord('A'))) else: result.append(ch) return ''.join(result) def vigenere_de(ctext, vk): result = [] ctext = ctext.upper() vk = vk.upper() kl = len(vk) for i, ch in enumerate(ctext): if ch.isalpha(): shift = (ord(vk[i % kl]) - ord('A')) % 26 result.append(chr((ord(ch) - ord('A') - shift) % 26 + ord('A'))) else: result.append(ch) return ''.join(result) def autokey_en(ptext, ak): result = [] ptext = ptext.upper() current_key = ak for ch in ptext: if ch.isalpha(): shift = (current_key - ord('A')) % 26 cipher_char = chr((ord(ch) - ord('A') + shift) % 26 + ord('A')) result.append(cipher_char) current_key = ord(cipher_char) else: result.append(ch) return ''.join(result) def autokey_de(ctext, ak): result = [] ctext = ctext.upper() current_key = ak for ch in ctext: if ch.isalpha(): shift = (current_key - ord('A')) % 26 plain_char = chr((ord(ch) - ord('A') - shift) % 26 + ord('A')) result.append(plain_char) current_key = ord(plain_char) else: result.append(ch) return ''.join(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()