domingo, 14 de octubre de 2012

Algoritmo de Vernan

ANÁLISIS

Ø  VERNAM


Para cifrar por el método de Vernam procede de la siguiente manera:
1.        Pásese a binario el texto llano a cifrar; por ejemplo, si el texto es el siglo de los quanta  su expresión en binario es:
1100101011011000010000011110011
1110100101100111111011000110111
1001000001110010011100101001000
0011101100011011110111001110100
0001111000101110101111000011110
111011110100011000011
Dicha conversión se realiza utilizando la tabla proporcionada por la profesora para poder pasar los símbolos a binario.

2.       Este es la clave también transformada en números binarios de la tabla proporcionada.
0010110110011001001111000101010
0111110111101101111100001000011
1001000000101111100110111111001
0010011011110111100000100110101
1111110110000001100010000110111
100011001110000001000...

3.       Sumemos término a término y módulo 2 (operación XOR) las dos secuencias anteriores. Así resulta obtendremos el binario del criptograma:
1110011101000001011111011011001
1001010010001010000111001110100
0000000001011101111010010110001
0001110111101100010111101000001
1110001110101111001101000101001
011000111010011001011

4.      Si el destinatario del criptograma pose la clave y la transforma en binario y hace la operación XOR puede recuperar el Mensaje en claro.

DIAGRAMA DE FUNCIONES



DESARROLLO

Para la ejecución del programa de Vernan es necesario instalar el python IDLE disponible en http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi y ejecutar ell código desde el IDE.

Algoritmo Vigenere: https://www.dropbox.com/s/phqh6i2cpaoger5/vernan2.py


Algoritmo de Vigenere

Análisis

Ø  VIGENERE


El algoritmo a seguir para desarrollar el método VIGENERE es el siguiente:
a.       Suponiendo que tenemos el siguiente mensaje,  clave y criptograma para analizar:
Mensaje:    P A R I S  V A U T  B I E N  U N E  M E S S E
Clave:      L O U P L  O U P L  O U P L  O U P  L O U P L
Criptograma: A O L X D  J U J E  P C T Y  I H T  X S M H P
b.      Tomando en cuenta que en este abecedario solo existen 26 letras donde A=0, B=1 , C=2 ... Z=25
c.       En términos matemáticos puede expresarse como:
Yi= (Xi+Zi) mod T

Donde Xi es el número de ubicación de la letra, es decir, que P le corresponde al número 15 en modo horizontal y Zi la L en modo vertical le corresponde al numero 11, y la letra T es el total de números del alfabeto. Entonces la ecuación quedará de la siguiente manera: Yi= (15 + 11) mod 26. El resultado es: 0, donde 0 es igual a A en modo horizontal.

d.      Con
Zi = L, O, U, PXi = P, A, R, I


Alternativamente, siendo Tel número de letras del alfabeto.
Se observa que a una misma letra en el texto claro le pueden corresponder diferentes letras en el texto cifrado.


Diagrama de funciones

Vigenere
star : Mcla, alfabeto, K
Vigenere (Mcla:String, K:String) : void
Cifrar ( ) : String
DesCifrar () : String
Desn (a : String  ) : String
                                                                                                                       
PruebaVigenere

main (args: String[] ) : void






Desarrollo

Para la ejecución del algoritmo Vigenere es necesario tener instalado el jdk y estos serán ejecutables. Se anexan el enlace de descarga correspondientes.



Algoritmo de Hill


ANÁLISIS



Ø  HILL


Este algoritmo ordena matricialmente los elementos que tengamos:                                         
1.        Tener la clave, esta clave debe ser cuadrada
2.       Los debes de acomodar en forma matricial  y las letras debes transformarlas en números dependiendo del abecedario que estés usando.
3.       Ya que tengas las clave en matriz debes sacar el determinante de la matriz clave det(K)
4.      Ya que tienes el det(K)=r mod n, r(residuo de la división del det y la longitud del alfabeto) n(la longitud del alfabeto)
5.       Sacar el determinante inverso det
6.      El det^(-1) inverso se saca det^(-1)=(n+1)/(det), este determínate debe de ser entero para poder descifrar. Y poder seguir aplicando este algoritmo es la única limitante de este algoritmo.
7.       Para poder Cifrar  Ci = [Mcla][K]modN
8.      Para Descifrar lo que tienes que hacer es sacar la matriz de cofactores de la matriz clave
9.      K^(-1)=[C cof][det ^(-1)]
10.    Y por ultimo descifrar Mcla = [K^(-1)][Ci]modN


Diagramas de flujo













Desarrollo

Para la ejecución del algoritmo de Hill solamente hay que ejecutar el archivo adjunto en la liga, es un install shield, se instala el programa y se ejecuta el icono en el escritorio. Se adjuntan los links de descarga correspondientes.

Se proporcionan algunas claves para probar el algoritmo: https://www.dropbox.com/s/bm9dxphul44b8be/claves%20validas%20hill.txt



Algoritmo Afín

ANÁLISIS

El algoritmo a seguir para desarrollar el método AFIN es el siguiente:
1.        Asignar un valor entero a cada letra del alfabeto español.
A =0 ,B=1 ,C=2 ,D=3 ,E=4 ,F=5 ,G=6 ,H=7 ,I=8 ,J=9 ,K=10 ,L=11 ,M=12 ,N=13 ,Ñ=14 ,
O=15 ,P=16 ,Q=17 ,R=18 ,S=19 ,T=20 ,U=21 ,V=22 ,W=23 ,X=24 ,Y=25Z=26 .

2.       Leer la constante de decimación  ( a ).
3.       Leer la constante de desplazamiento ( b ).

4.      Si    a = 1     y     1<= b <= 27; será por desplazamiento variable.


A.      Comenzar a cifrar.
a.       Leer el texto que se desea cifrar  ( Mensaje En Claro ).
Nota: Validar que únicamente se ingresen los caracteres aceptados en el alfabeto.
b.       Asignar el valor correspondiente a cada letra del texto que se desea cifrar (Mi).
c.       Leer el texto que servirá como clave.
d.      Asignar el valor correspondiente a cada letra del texto que servirá como clave ( Ki ).
Nota: Pueden recibirse llaves de cualquier tamaño,  más grandes o más chicas que el texto que se desea cifrar, sin embargo la llave se adaptará al tamaño del texto a cifrar:
e.      Realizar la siguiente operación:   ( Mi + Ki ) mod 27 
f.        Convertir el valor obtenido de la operación anterior a una letra correspondiente.
g.      Termina el proceso de cifrado.

B.      Comenzar a descifrar.
a.       Leer el texto cifrado que desea descifrar  ( Ci )
b.      Asignar el valor correspondiente a cada letra del texto cifrado ( Ki )
c.       Leer el texto que servirá como llave
d.      Asignar el valor correspondiente a cada letra del texto que servirá como llave
e.      Realizar la siguiente operación:   (Ci – Ki ) mod 27
Nota: la operación modulo trabaja bajo las mismas características antes descritas.


5.       Si    a distinto de 1     y     b distinto de cero; decimación pura.

A.      Comenzar a cifrar.
a.       Leer el texto que se desea cifrar  ( mensaje en claro ).
Nota: Validar que únicamente se ingresen los caracteres aceptados en el alfabeto.
b.      Asignar el valor correspondiente a cada letra del texto que se desea cifrar  (Mi).
Nota: aquí no se necesita de un texto adicional que funcione como clave.
c.       Realizar la siguiente operación  ( a * Mi ) mod 27.
d.      Convertir el valor obtenido de la operación anterior, a su letra correspondiente.
e.      Termina el proceso de cifrado.

B.      Comenzar a descifrar.
a.       Obtener el valor inverso de “a”.
b.      Realizar la siguiente operación   ( Ci * a-1 ) mod 27.
c.       Convertir el valor obtenido de la operación anterior, a su letra correspondiente.
d.      Termina el proceso de descifrado.


Diagrama de flujo


Diagramas de clases


Afin

ConvierteaNum



         Empieza() : void
       main  (args: String[]) : void

          letraaNum ( a: char ) : int
           NumaLetra( c: int ) : char

CifAfin

DesCifAfin



cifrar(cad: String, cve: String) : void
cifrar(cad: String, a: int) : void
Cifrado() : void


descifrar(cif: String, cve: String): void
descifrar(cif: String, a: int): void
Descifrado() : void



DESARROLLO

Para la ejecución del programa correspondiente al algoritmo es necesario tener instalado el jdk y estos serán ejecutables. Se anexan el correspondientes.



martes, 9 de octubre de 2012

¿Quienes somos?

Somos un grupo de estudiantes de la Facultad de Ingeniería desarrollando un proyecto de clase, sin afanes de lucro. Atte:



Alejo Sandoval Lourdes Angélica
   Jaimes Salinas Gregorio
   Mejía Barrera Julio César
   Trejo Sánchez Pedro Arturo