From 187233f79a5af0db2da7620f82e22fb78a511004 Mon Sep 17 00:00:00 2001 From: joseph-alan-jose Date: Mon, 27 Mar 2023 15:17:40 +0530 Subject: [PATCH] Issue #67: Added new encryption algorithm --- .../columnar_transposition_cipher.py | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 algorithms/cryptography/columnar_transposition_cipher.py diff --git a/algorithms/cryptography/columnar_transposition_cipher.py b/algorithms/cryptography/columnar_transposition_cipher.py new file mode 100644 index 0000000..6f694e8 --- /dev/null +++ b/algorithms/cryptography/columnar_transposition_cipher.py @@ -0,0 +1,54 @@ +import math +def encrypt(key, message): + ciphertext = [] + for col in range(key): + position = col + while position < len(message): + ciphertext.append(message[position]) + position += key + return ''.join(ciphertext) + +def decrypt(key, message): + numOfRows = math.ceil(len(message) / key) + plaintext = [] + cipher = [*message] + remainder = len(message)%key + count=0 + if(remainder != 0): + for i in range(0,len(message),numOfRows): + count += 1 + if(count > remainder): + cipher.insert(i+numOfRows-1,'#') + cipher.append('#') + for row in range(numOfRows): + position = row + while(position < len(cipher)): + plaintext.append(cipher[position]) + position += numOfRows + plaintext = [ele for ele in plaintext if ele != '#'] + else: + for row in range(numOfRows): + position = row + while(position < len(message)): + plaintext.append(message[position]) + position += numOfRows + return ''.join(plaintext) +def main(): + while(True): + print("1. Encrypt") + print("2. Decrypt") + print("3. Exit") + option = int(input("Enter the option: ")) + if(option == 1): + text = input("Enter the plain text: ") + k = int(input("Enter the key: ")) + cipher = encrypt(k,text) + print("Ciphertext: ", cipher) + if(option == 2): + text = input("Enter the ciphertext: ") + k = int(input("Enter the key: ")) + plain = decrypt(k, text) + print("Plaintext: ", plain) + if(option == 3): + break +main() \ No newline at end of file