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 pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy