El cifrado Vigenère era un cifrado polialfabético simple que básicamente aplicaba uno de varios cifrados César, según una clave. Básicamente, las letras en la tecla indican qué alfabeto desplazado usar. Para ese fin había una herramienta simple, llamada el cuadrado de Vigenère:
Aquí cada fila es un alfabeto separado, que comienza con la letra correspondiente de la clave. Las columnas se utilizan para determinar la letra cifrada. El descifrado funciona de la misma manera, solo viceversa.
Supongamos que queremos encriptar la cadena CODEGOLF
. También necesitamos una llave. En este caso la clave será FOOBAR
. Cuando la clave es más corta que el texto plano, la extendemos por repetición, por lo tanto, la clave real que utilizamos es FOOBARFO
. Ahora buscamos la primera letra de la clave, que es F
encontrar el alfabeto. Comienza, quizás como era de esperar, con F
. Ahora encontramos la columna con la primera letra del texto sin formato y la letra resultante es H
. Para la segunda letra tenemos O
como letra clave y la letra de texto sin formato, lo que resulta en C
. Continuando de esa manera finalmente llegamos HCRFGFQT
.
Tarea
Su tarea ahora es descifrar mensajes, con una clave. Sin embargo, dado que hemos superado el siglo XVI y tenemos computadoras, al menos deberíamos admitir un alfabeto un poco más grande:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
La construcción de la plaza Vigenère sigue siendo muy parecida y el cifrado sigue funcionando de la misma manera. Es un poco ... difícil de manejar para dar aquí por completo.
Entrada
La entrada se proporciona en la entrada estándar como dos líneas de texto separadas, cada una terminada por un salto de línea. La primera línea contiene la clave, mientras que la segunda contiene el texto cifrado.
Salida
Una sola línea, que contiene el mensaje descifrado.
Condición ganadora
Dado que el cifrado a veces se considera un arma, el código debe ser breve para facilitar el contrabando. Cuanto más corto, mejor, ya que reduce la probabilidad de descubrimiento.
Entrada de muestra 1
Key
miQ2eEO
Salida de muestra 1
Message
Entrada de muestra 2
ThisIsAKey
CoqKuGRUw29BiDTQmOpJFpBzlMMLiPb8alGruFbu
Salida de muestra 2
ThisWorksEquallyWellWithNumbers123894576
Ha pasado una semana. La solución más corta actualmente ha sido aceptada. Para aquellos interesados, en nuestro concurso tuvimos las siguientes presentaciones y duraciones:
130 - Python
146 - Haskell
195 - C
197 - C
267 - VB.NET
Y nuestras propias soluciones que no se clasificaron con las demás:
108 - Ruby
139 - PowerShell