import math
# Encryption function
def encryptMessage(msg, key):
cipher = [''] * key
for col in range(key):
pointer = col
while pointer < len(msg):
cipher[col] += msg[pointer]
pointer += key
return ''.join(cipher)
# Decryption function
def decryptMessage(cipher, key):
numOfCols = math.ceil(len(cipher) / key)
numOfRows = key
numOfShadedBoxes = (numOfCols * numOfRows) - len(cipher)
plain = [''] * numOfCols
col = 0
row = 0
for symbol in cipher:
plain[col] += symbol
col += 1
if (col == numOfCols) or (col == numOfCols - 1 and row >= numOfRows - numOfShadedBoxes):
col = 0
row += 1
return ''.join(plain)
# Example usage
if __name__ == "__main__":
message = "juifewwikewmfc"
key = 5
encrypted = encryptMessage(message, key)
print(f"Encrypted: {encrypted}")
decrypted = decryptMessage(encrypted, key)
print(f"Decrypted: {decrypted}")