Vamos a encriptar #2 - El cifrado de Vigenère

Hola de nuevo a todos, el día de hoya vamos a continuar con la celebración por las 10000 visitas que ha recibido el blog, y para ello vamos a ver un poco de lo que en un inicio fue la causa de abrir este blog.


 Cómo recordaras, uno de los primeros fue: "¿Un acertijo, Por qué no?", el reto fue resuelto no hace mucho. La persona que logro descifrarlo ahora tiene su lugar en el salon de la fama. Para continuar con el tema de encriptacion, hoy vamos a ver uno de los métodos de cifrado más sencillo (y funcional) a mi gusto.

El cifrado de Vigenere.

Para empezar, ¿que es el cifrado de Vigenere? Bien, se puede resumir de la siguiente manera:
El cifrado Vigenère es un cifrado basado en diferentes series de caracteres o letras del cifrado César formando estos caracteres una tabla, llamada tabla de Vigenère, que se usa como clave. El cifrado de Vigenère es un cifrado de sustitución simple polialfabético.
El cifrado Vigenère se ha reinventado muchas veces. El método original fue descrito por Giovan Battista Belasso en su libro de 1553 La cifra del Sig. Giovan Battista Belasso. Sin embargo, fue incorrectamente atribuido más tarde a Blaise de Vigenère, concretamente en el siglo XIX, y por ello aún se le conoce como el "cifrado Vigenère".
Wikipedia/Cifrado de Vigenere.

Cómo cifrar.

Antes que nada vamos a revisar un par de puntos importantes. Para empezar con el cifrado de Vigenere, debemos hacer uso del cifrado A1Z27. El cifrado A1Z27  consiste en asignar un valor numerico a cada letra del alfabeto, pero hay que recordar que; dependiendo del idioma; este tiene más o menos letras. Si se usa el alfabeto en inglés, tendriamos algo cómo lo siguiente

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26


Cómo notarás, si le asignamos el valor de 1 a "A" 2 a "B" y asi sucesivamente hasta "Z" tendremos una numeracion que solo llega hasta 26.
En el alfabeto en español hay que tener en cuenta que hay una letra más. La letra "Ñ" que no siempre se toma en cuenta en el alfabeto inglés. Si numeramos otra vez pero tomando en cuenta la letra "Ñ" tendremos algo como lo que sigue:

A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Siempre será necesario saber el idioma original para hacer los ajustes necesarios pero para fines practicos, en todos los ejemplo que te encuentres en este blog, siempre se usará el alfabeto en español (A1Z27).
Una vez aclarado lo anterior, empecemos con lo que sería el método para encriptar usando el cifrado de Vigenere.

Supongamos que queremos enviar de forma el siguiente mesaje: HelloWorld. Siempre debemos de usar una contraseña para este caso voy a usar "USG" (pero puede ser cualquier frase/palabra).
Usando el método A1Z27 procedemos a asignar el valor a cada letra de la contraseña:

  • U = 22.
  • S = 20.
  • G = 7.
Luego a cada palabra de la frase a encriptar, también le asignamos el valor correspondiente a cada letra:

  • H = 8.
  • E = 5.
  • L = 12.
  • L = 12.
  • O = 16.
  • W = 24.
  • O = 16.
  • R =  19.
  • L = 12.
  • D = 4.
Ahora procedemos a "sumar" las letras, la primer letra de la contraseña, se le sumara a la primer letra de la frase a encriptar, la segunda con la segunda y asi sucesicamente, si la frase o la contraseña tiene menor numero de letras que la otra, repetiremos desde el inicio, en el ejemplo quedaría de la siguiente manera:

  • H + U (8 + 22 = 30)
  • E + S (5 + 20 = 25)
  • L + G (12 + 7 = 19)
  • L + U (12 + 22 = 34)
  • O + S (16 + 20 = 36)
  • W + G (24 + 7 = 31)
  • O + U (16 + 22 = 38)
  • R + S (19 + 20 = 39)
  • L + G (12 + 7 = 19)
  • D + U (4 + 22 = 26)
Para obtener el resultado, debemos de obtener el residual del numero que nos resulto entre 27 que es el numero de letras que componen el alfabeto. La operación que se encarga de esto es "mod" y la podemos expresar de la siguiente manera: 30 mod 27 = 3. Al realizar la opereacion en todas la sumas, siempre obtendremos un numero igual o menor a 27 y cada uno correspondera a cada letra del alfabeto.
El resultado de aplicar el cifrado de Vigenere en la frase "HELLOWORLD" con la contraseña "USG" es:

  • 30 mod 27 = 3 = C
  • 25 mod 27 = 25 = X
  • 19 mod 27 = 19 = R
  • 34 mod 27 = 7 = G
  • 36 mod 27 = 9 = I
  • 31 mod 27 = 4 = D
  • 38 mod 27 = 11 = K
  • 39 mod 27 = 12 = L
  • 19 mod 27 = 19 = R
  • 26 mod 27 = 26 = Y
HELLOWORLD = CXRGIDKLRY.

Cómo descifrar.

Ahora viene una parte importante de todo el proceso, devolver a una forma legible una frase que este cifrada. Siempre será necesario saber la contraseña que se uso para cifrar la frase. utilizando el ejemplo anterior; la contraseña es: "USG".
Par desencriptar lo primero que vamos a hacer es restar el numero correspondiente a la letra de la contraseña al letra ya de la frase ya cifrada, al igual que en la anterior, se avanzará de una en una y a cada letra se le restará su valor, si la frase o la contraseña son mas largas, se repetira hasta completar la palabra más larga.

  • 3-22 = -19
  • 25 - 20 = 5
  • 19 - 7 = 12
  • 7 - 22 = -15
  • ...
Al realizar las restas si el numero es negativo o menor que 1, procederemos a sumarle 27 (el numero de letras que tiene el alfabeto).
  • -19 + 27 = 8 = H
  • 5 = 5 = E
  • 12 = 12 = L
  • -15 + 27 = 12 = L
  • ...
Si el numero es mayor a 27 hay que realizar también la operación mod.
Ahora sabiendo esto, no me queda nada más que decir:
gizgxvgñlbi USG

No hay comentarios.