SINGLE COLUMNAR ENCRYPTION - PE
def columnar_transposition_encrypt(plaintext, key):
#Remove spaces from plaintext
plaintext = plaintext.replace(" ", "")
key_length = len(key)
#Generate column order based on sorted key characters
key_order = sorted(list(enumerate(key)), key=lambda x: x[1])
column_order = [index for index, _ in key_order]
#Pad the plaintext with '_' if it's not divisible by key length
padding = (key_length - len(plaintext) % key_length) % key_length
plaintext += '_' * padding # Using '_' as padding character
#Break plaintext into rows
rows = [plaintext[i:i + key_length] for i in range(0, len(plaintext), key_length)]
#Read columns in key order to form ciphertext
ciphertext = ''
for col in column_order:
for row in rows:
ciphertext += row[col]
return ciphertext
#Main program
if name == "main":
plaintext = input("Enter plaintext to encrypt: ")
key = input("Enter key: ")
if not key.isalpha():
print("Key must contain only alphabetic characters.")
else:
encrypted_message = columnar_transposition_encrypt(plaintext, key.upper())
print("Encrypted Message:", encrypted_message)