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:
| p | y | t | h | o | n |
|---|---|---|---|---|---|
| m | e | e | t | m | e |
| b | y | t | h | e | l |
| a | k | e | a | t | m |
| i | d | n | i | g | h |
| t | b | r | i | n | g |
| s | h | o | v | e | l |
| 4 | 6 | 5 | 1 | 3 | 2 |
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"| p | y | t | h | o | n |
|---|---|---|---|---|---|
| m | e | e | t | m | e |
| a | t | m | i | d | n |
| i | g | h | t | x | x |
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.
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"N/A