IS Lab 1 - Progress So Far
This commit is contained in:
parent
e14d40f9b2
commit
518399472f
7 changed files with 348 additions and 1 deletions
118
IS/Lab/Lab1/q2_autokey.py
Normal file
118
IS/Lab/Lab1/q2_autokey.py
Normal file
|
@ -0,0 +1,118 @@
|
|||
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()
|
Loading…
Add table
Add a link
Reference in a new issue