Cifrado de Vernam en javascript

El desarrollo de software que cifre mensajes, es muy útil para entender el funcionamiento de los mismos y de la forma en la que funcionan este tipo de programas en la vida real, en este caso nos hemos “inspirado” en el cifrado de Vernam y escrito en javascript, el desarrollo del mismo fue de la siguiente manera:

  1. El primer paso fue utilizando javascript, utilizando la función “prompt”, se guarda el texto en la variable “texto claro”, también se puede ver que la “contraseña” que elegimos fue un numero al azar (14) en este caso (se explicara esto mas adelante)

imagen1

imagen11

2. Se separo el texto claro, “carácter por caracter” para facilitar su procesado

2

3.Había muchas maneras de convertir cada carácter a binario, pero lamentablemente la mayoría necesitaban conexión a internet, para evitar problemas se utilizo una listado del código ascii versión 7.2 proporcionado por la pagina de ibm

3

4.En el código se pueden ver varios console.log así como la función alert, estos fueron usados principalmente para verificar el funcionamiento del código en cada paso realizado

5.El algoritmo que se utilizo fue uno en el que se elevaba al cuadrado este número y luego se le restaba 88 , en números pequeños eso no daba gran problema pero a medida que se iba aumentado el respectivo numero era más probable que rebasara el límite de 8 bits (256), así que se implementó una función que verificara que el numero estuviera dentro de un rango (1-255), y de lo contrario lo pasaba por un nuevo algoritmo que lo arreglaba, e inclusive evitaba cosas como “números decimales”

5

6.En la siguiente imagen se puede ver una matriz ya definida (bajo el nombre de clave), la cual se utilizó para las respectivas pruebas, pero que después es “sobrescrita”, por la clave que se creó anteriormente, también se verifica que la clave mida 8 bits, en caso de que sea menor (por ejemplo un 1, 10, o 20 binario), se agregan los respectivos ceros a la izquierda para que quede con 8 bits exactamente, y pueda ser utilizado sin problemas

6

62

7.Después de esto, queda el proceso de “cifrado”, en él se comparan los binarios, y sobre la base de eso (utilizando la operación XOR), se dan los respectivos resultados, todo es almacenado en matrices para facilitar su manejo

7

72

73

8.Finalmente en la pantalla se ve la respectiva clave generada y en la consola del navegador se ve la clave que se utilizó para fines de verificación

8

Descifrado

d0

1. Para el descifrado, se trató de reutilizar la mayor parte posible del código del programa anterior, para tratar de agilizar el proceso y poder entregar el proyecto en tiempo y forma, al igual que el anterior inicia pidiendo el texto (en este caso el texto cifrado), que se obtuvo anteriormente, únicamente es necesario ingresarlo como salió en el código anterior, las “comas que salieron” es el resultado de utilizar matrices

d1

d12

2.Lamentablemente por el proceso que se utilizó anteriormente, todo estaba “desacomodado”, a primera vista es difícil saber en qué punto termina una un carácter y en qué punto inicia el otro, por lo que fue necesario “volverlo a juntar”, sabiendo que cada carácter constaba de 8 bits, nos facilitaba la transcripción, pero aun así había que lidiar con que se encontraban “separadas”, por lo que se intentó hacer “grupos de 8”, para poder obtener la cantidad de caracteres que había en el código

d2

d21

d22

3.Después de esto, se planeaba hacer la conversión de forma ”automática”, pero debido a que estaba “cifrado”, se debía de realizar la clave de nuevo, de la misma manera que al momento de cifrarlo para poderlo “descifrar”

d3

4.Se siguieron los mismos parámetros con los que se creó originalmente para evitar cualquier diferencia

d4

d42

5.Básicamente utilizando el proceso anterior de cifrado (o mejor dicho descifrado) pero aplicado esta vez sobre el texto cifrado y con la misma clave debería de salir el “texto claro”, así que se procedió a realizar

d5

d52

6.Una vez que se terminó la comparación teníamos el texto claro pero lamentablemente en binario, así que lo que se tuvo que realizar el volverlo a unir en “bloques de 8”, de esta manera seria mas fácil obtener su equivalente en código ascii

d6

d62

d63.png

7.Después de esto únicamente fue utilizada la misma “tabla”, de código ascii que habíamos utilizado anteriormente, pero para obtener su valor en código ascii (solo se tuvieron que invertir los valores)

d7

8.Al utilizar matrices todo los caracteres aparecían separadas por una coma, era entendible pero daba mal aspecto, por lo que junto todo en una solo matriz para que apareciera sin esas “separaciones”

d8

d82

d83

Espero este explicación les haya sido de ayuda, como sea les comparto el enlace para que puedan descargar los archivos (con su respectiva licencia :)), y ahí mismo pondré las referencias que utilice para la realización de este proyecto:

https://github.com/Emmanuel00/cifrado

Si te gusto,puedes seguirme en mis redes sociales o rss:

Newsletter: https://goo.gl/forms/r8dOTVHglaqfrmQl2

Twitter: https://twitter.com/fede_3mmanuel

Facebook: https://www.facebook.com/Denshai-1425378094384435/

Google Plus: https://plus.google.com/+EmmanuelS%C3%A0nchezfede

Feed RSS: https://denshai.wordpress.com/feed/

Vimeo (ve y descarga nuestros videos): https://vimeo.com/user29167848

Github: https://github.com/Emmanuel00

Licencia Creative Commons

Esta obra está bajo una Licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional.

 

 

 

 

 

 

 

 

 

 

 

 

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s