89 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 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):
 | |
|     k = ord(ak.upper()) if isinstance(ak, str) else ak
 | |
|     out = []
 | |
|     for ch in ptext.upper():
 | |
|         if ch.isalpha():
 | |
|             out_ch = chr((ord(ch) - 65 + (k - 65)) % 26 + 65)
 | |
|             out.append(out_ch); k = ord(ch)
 | |
|         else:
 | |
|             out.append(ch)
 | |
|     return ''.join(out)
 | |
| 
 | |
| def autokey_de(ctext, ak):
 | |
|     k = ord(ak.upper()) if isinstance(ak, str) else ak
 | |
|     out = []
 | |
|     for ch in ctext.upper():
 | |
|         if ch.isalpha():
 | |
|             p = chr((ord(ch) - 65 - (k - 65)) % 26 + 65)
 | |
|             out.append(p); k = ord(p)
 | |
|         else:
 | |
|             out.append(ch)
 | |
|     return ''.join(out)
 | |
| 
 | |
| 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()
 |