MIT-Curricular/IS/Lab/Lab1/q2_autokey.py
2025-08-12 09:43:39 +05:30

96 lines
2.8 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):
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()