DOUBLE COLUMNAR ENCRYPTION - PE
import math
def columnar_transposition_encrypt(plaintext, key):
plaintext = plaintext.replace(" ", "") # remove spaces for tighter encryption
key_length = len(key)
#Calculate padding
padding = (key_length - len(plaintext) % key_length) % key_length
plaintext += '_' * padding # Use underscore as padding character
#Determine column order from sorted key
key_order = sorted(list(enumerate(key)), key=lambda x: x[1])
column_order = [index for index, _ in key_order]
#Break text into rows
rows = [plaintext[i:i+key_length] for i in range(0, len(plaintext), key_length)]
#Read columns in key order
ciphertext = ''
for col in column_order:
for row in rows:
ciphertext += row[col]
return ciphertext
def double_columnar_encrypt(plaintext, key1, key2):
#First encryption
first_pass = columnar_transposition_encrypt(plaintext, key1.upper())
#Second encryption
second_pass = columnar_transposition_encrypt(first_pass, key2.upper())
return second_pass
#Main program
if name == "main":
plaintext = input("Enter plaintext to encrypt: ")
key1 = input("Enter first key: ")
key2 = input("Enter second key: ")
if not key1.isalpha() or not key2.isalpha():
print("Both keys must contain only alphabetic characters.")
else:
encrypted_message = double_columnar_encrypt(plaintext, key1, key2)
print("Encrypted Message:", encrypted_message)