Cifrado columnar

Published by Matt in

El cifrado columnar es un cifrado de transposición que funciona así.

Comienza con un mensaje secreto:

msg = "Meet me by the lake at midnight. Bring shovel."

Convierte las letras mayúsculas a minúsculas y elimina la puntuación y los espacios:

msg = "meetmebythelakeatmidnightbringshovel"

Luego, elige una palabra clave formada por letras distintas:

keyword = "python"

Divide el mensaje en fragmentos de la misma longitud que la palabra clave y escríbelos en filas debajo de la palabra clave. Luego, numera las columnas según el orden alfabético de las letras de la palabra clave:

python
meetme
bythel
akeatm
idnigh
tbring
shovel
465132

Lee el mensaje cifrado (texto cifrado) de las columnas, en el orden especificado por los números:

ciphertext = "thaiivelmhglmetgnembaitsetenroeykdbh"

Si la longitud del mensaje no es múltiplo de la longitud de la palabra clave, completa cada espacio en blanco con "x". Por ejemplo:

msg = "Meet me at midnight."

keyword = "python"
python
meetme
atmidn
ightxx

Crea una función que reciba una cadena y una palabra clave. Devuelve el texto cifrado si la cadena está en texto plano (es decir, dividida en palabras normales en inglés y con puntuación), o el mensaje descifrado si la cadena está en texto cifrado. El mensaje descifrado resultante no tendrá espacios.

Ejemplos

cipher("Meet me by the lake at midnight. Bring shovel.", "python")
➞ "thaiivelmhglmetgnembaitsetenroeykdbh"

cipher("meeanbsleyamgioxebltirhxttkihnvxmhedtgex", "monty")
➞ "meetmebythelakeatmidnightbringshovelxxxx"

cipher("Mission Delta Kilo Sierra has been compromised. Kill Steve. Evacuate", "cake")
➞ "ioliiabcrsiteuxmieksrsnpiksecesdaoraemmdlvatxsntleheooelevax"

Notas

N/A