martes, 6 de julio de 2010

Encriptación RSA

Que tal compañeros esta vez bueno me toco hacer el código de la encriptación RSA y pues bueno tengo un código que pseudo simula lo que la encartación hace (por ahora)

debido al tiempo no pude poner algunos detalles mas en el programa pero poco a poco iré cambiando el código para que quede como debería ir el bosquejo del RSA.

bueno pues presentare el código y luego explicare que hace.

-----------------------------------------------------------------------------
#include <>
#include <>
int main (int pedro,char** amanda)
{
int i;
long int n;
long int e;
long int h;
int pr1;
int pr2;
long int p[i];
long int cociente[i];
long int residuo[i];
long int h_aux;
long int q[i];
long int encrypt_op;
long int uncrypt_op;
int mensaje;
//pedimos los dos números para iniciar el proceso de encriptación

printf("introduzca 2 números primos para iniciar al encriptación\n");
printf("introduzca el primer numero primo: ");
scanf("%d",&pr1);
printf("introduzca introduzca el segundo numero primo: ");
scanf("%d",&pr2);


n = (pr1 * pr2); //se le asigna una variable extra para asignar el producto de ambos
printf("n es: %d\n",n);

h = ((pr1 - 1) * (pr2 - 1));
printf("euler es: %d\n",h);
while(1){
printf("introduce un numero entre 1 y %d que su MCD con %d sea 1:",h,h);
scanf("%d", &e);

printf("e es: %d\n",e);
if(e <> h){
printf("el numero introducido no esta en el rango inroduce otro.\n");
}else{
break;
}
}

i=0;
h_aux = h;
p[0]=0;
p[1]=1;
while(1){

cociente[i] = h / e;
residuo[i] = h - (e*cociente[i]);
h = e;
e = residuo[i];
q[i]=cociente[i];
if(i>=2){
p[i]=((p[i-2])-(p[i-1]*q[i-2])) % h_aux;

printf("el paso actual es:%d \nel cociente es %d\n",i, cociente[i]);
printf("el residuo es %d \nel inverso es %d",residuo[i], p[i]);
printf("\n");
if(residuo[i] == 1){
break;
}
i++;
}

printf("introduce el numero a convertir: ");
scanf("%d", &mensaje);
encrypt_op = (pow(mensaje,e) % n);
printf("el mensaje encriptado es %ld\n",encrypt_op);

uncrypt_op = (pow(encrypt_op,p[i]) % n);
printf("el mensaje desencriptado es: %ld\n",uncrypt_op);


}
return 8;
scanf(NULL);
}
---------------------------------------------------------------------

bien pues el programa por ahora le pide al usuario que introduzca dos números los cuales deben ser primos, despues de eso el programa le asingará a una variable n el valor del producto de estos dos

n = primo 1 * primo 2

luego se calcula un h

h = ((primo 1)-1) - ((primo 2) - 1)

despues de esto pasamos a elegir un numero primo.
el cual se encuentre entre 1 y nuestro numero h, al cual llamaremos "e" este debe ser MCD(e,h)=1.

despues pasaremos a utilizar el algoritmo extendido de euler, con el cual obtendremos un valor "d"
de tal manera manera que satisfaga la condición




acá les dejare un applet que me proporcionaron con el cual pueden obtener el inverso del numero que busquen. applet

una vez teniendo este dato podemos introducir un mensaje, el cual podemos cifrar con la forma de encriptación.

C = M^e mod n

y desencriptarlo con la formula:

M = C^d mod n

bien pues le falta todavia mucho a este programa pero por ahora creo que es la base para poder hacer el programa completo aun falta que sea una generación aleatoria de números primos al inicio y tambien de los subsecuentes "e" y "h".

pero creo que esas modificaciones seran durante los proximos dias espero les guste y me seria de gran ayuda opiniones para esas modificaciones

hasta pronto.

1 comentario:

Seguidores