OneCompiler

SINGLE COLUMNAR ENCRYPTION - PE

91

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)