__ Indice __
¿Qué es Ivuis?
Proceso de Cifrado
Llave
Proceso de Descifrar
Github
__ ¿Qué es Ivuis? __
Ivuis es un cifrado creado por el Team WASP que esta inspirado en los métodos por llave pública, entra en la clasificación de simétrico, la finalidad del proyecto es entender y aportar en el mundo de la criptografía.
__ Proceso de Cifrado __
Ivuis tiene un alfabeto interno el cuál nosotros podemos definir, para hacer hacer la explicación básica supongamos que tenemos de la - a - hasta la - z -, a cada letra se le asignará un número aleatorio con un rango de 0 hasta la longitud total de nuestra cadena, en este caso es 25 :
["a"] = 5; ["b"] = 8; ["c"] = 0; ["d"] = 6; ["e"] = 13; ["f"] = 17;
["g"] = 18; ["h"] = 9; ["i"] = 21; ["j"] = 10; ["k"] = 14; ["l"] = 16;
["m"] = 24; ["n"] = 7; ["o"] = 22; ["p"] = 4; ["q"] = 23; ["r"] = 20;
["s"] = 3; ["t"] = 11; ["u"] = 15; ["v"] = 12; ["w"] = 2; ["x"] = 19;
["y"] = 25; ["z"] = 1;
A continuación se le suma un número dado por el usuario, lo que será nuestra Number Key vamos a darle el número 100. Así que tendríamos el siguiente modelo matemático:
alfabeto[Indice] + NumberKey
["a"] = 105; ["b"] = 108; ["c"] = 100; ["d"] = 106; ["e"] = 113; ["f"] = 117;
["g"] = 118; ["h"] = 109; ["i"] = 121; ["j"] = 110; ["k"] = 114; ["l"] = 116;
["m"] = 124; ["n"] = 107; ["o"] = 122; ["p"] = 104; ["q"] = 123; ["r"] = 120;
["s"] = 103; ["t"] = 111; ["u"] = 115; ["v"] = 112; ["w"] = 102; ["x"] = 119;
["y"]= 125; ["z"]= 101;
El otro parámetro que tenemos es Numerican Base este nos dirá en que base se encontrará nuestro cifrado, ya sea en binario, decimal, hexadecimal, etc etc. En este ejemplo lo vamos a poner en base Hexadecimal, así que será 16. Entonces nos queda lo siguiente:
CambiarBase( alfabeto[Indice] + NumberKey , NumericanBase)
Cuidado aquí, recordemos que estos números están en base hexadecimal, así que aunque vemos que z = 65, ese 65 no es el número que nosotros conocemos. 65 es el equivalente en hexadecimal al 101 del sistema Decimal (El de toda la vida).
Ya el último paso es pasar cada número a su equivalente a carácter, podemos guiarnos de la tabla del código ASCII:
["a"] = 69; ["b"] = 6c; ["c"] = 64; ["d"] = 6a; ["e"] = 71; ["f"] = 75;
["g"] = 76; ["h"] = 6d; ["i"] = 79; ["j"] = 6e; ["k"] = 72; ["l"] = 116;
["m"] = 74; ["n"] = 107; ["o"] = 6b; ["p"] = 68; ["q"] = 7b; ["r"] = 78;
["s"] = 67; ["t"] = 6f; ["u"] = 73; ["v"] = 70; ["w"] = 66; ["x"] = 77;
["y"]= 7d; ["z"]= 65;
Cuidado aquí, recordemos que estos números están en base hexadecimal, así que aunque vemos que z = 65, ese 65 no es el número que nosotros conocemos. 65 es el equivalente en hexadecimal al 101 del sistema Decimal (El de toda la vida).
Ya el último paso es pasar cada número a su equivalente a carácter, podemos guiarnos de la tabla del código ASCII:
["a"] = "i"; ["b"] = "l"; ["c"] = "d"; ["d"] = "j"; ["e"] = "q"; ["f"] = "u";
["g"] = "v"; ["h"] = "m"; ["i"] = "Y"; ["j"] = "n"; ["k"] = "r"; ["l"] = "t";
["m"] = "|"; ["n"] = "k"; ["o"] = "z"; ["p"] = "h"; ["q"] = "{"; ["r"] = "x";
["s"] = "g"; ["t"] = "o"; ["u"] = "s"; ["v"] = "p"; ["w"] = "f"; ["x"] = "w";
["y"]= "}"; ["z"]= "e";
Al ingresar un texto de ejemplo (hola) obtendremos: mzti
Y cada que ejecutemos el programa, todo nuestro abecedario tendrá nuevamente valores aleatorios.
69 6c 64 6a 71 75 76 6d 79 6e 72 116 74 107 6b 68 7b 78 67 6f 73 70 66 77 7d 65
Esta será nuestra llave, nos dice que valor tiene cada letra de nuestro abecedario.
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
Ya una vez que tenemos nuestra llave, sabemos que está ordenada respecto a nuestro abecedario así que solamente tenemos que asignarle a cada letra su valor nuevamente, quedando de esta forma:
["a"] = 69; ["b"] = 6c; ["c"] = 64; ["d"] = 6a; ["e"] = 71; ["f"] = 75;
Al ingresar un texto de ejemplo (hola) obtendremos: mzti
Y cada que ejecutemos el programa, todo nuestro abecedario tendrá nuevamente valores aleatorios.
__ Llave __
Ya que cada letra de nuestro abecedario tendrá un valor aleatorio siempre, necesitamos tener una llave única para cada ocasión. Para eso tenemos que juntar todos sus valores en orden, para complicar un poco las cosas la llave será en la base numérica que ha dado el usuario.69 6c 64 6a 71 75 76 6d 79 6e 72 116 74 107 6b 68 7b 78 67 6f 73 70 66 77 7d 65
Esta será nuestra llave, nos dice que valor tiene cada letra de nuestro abecedario.
__ Descifrar __
69 6c 64 6a 71 75 76 6d 79 6e 72 116 74 107 6b 68 7b 78 67 6f 73 70 66 77 7d 65a 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
Ya una vez que tenemos nuestra llave, sabemos que está ordenada respecto a nuestro abecedario así que solamente tenemos que asignarle a cada letra su valor nuevamente, quedando de esta forma:
["a"] = 69; ["b"] = 6c; ["c"] = 64; ["d"] = 6a; ["e"] = 71; ["f"] = 75;
["g"] = 76; ["h"] = 6d; ["i"] = 79; ["j"] = 6e; ["k"] = 72; ["l"] = 116;
["m"] = 74; ["n"] = 107; ["o"] = 6b; ["p"] = 68; ["q"] = 7b; ["r"] = 78;
["s"] = 67; ["t"] = 6f; ["u"] = 73; ["v"] = 70; ["w"] = 66; ["x"] = 77;
["y"]= 7d; ["z"]= 65;
Ingresamos mensaje - mzti - lo convertimos a su código ASCII y luego a la base numérica que el usuario ingreso (En este caso hexadecimal) - 6d6b6f6e - y comparamos con nuestra matriz y con ello obtener su letra, dándonos como resultado - hola -
Ingresamos mensaje - mzti - lo convertimos a su código ASCII y luego a la base numérica que el usuario ingreso (En este caso hexadecimal) - 6d6b6f6e - y comparamos con nuestra matriz y con ello obtener su letra, dándonos como resultado - hola -
__ Github __
https://github.com/NeoTRAN001/ProyectoIvuis
Nota del Autor: El cifrado Ivuis tiene aun otros pasos para dificultar más la legibilidad del texto y la llave, como agregar información basura. Pero la explicación es para entender en esencia lo que hace.
Comentarios
Publicar un comentario