MANUAL....
http://master.informatik.googlepages.com/criptografia.rar
El RSA es un sistema de encriptacion muy usado en los sistema informatico : consisten en el cifrado de informacion atravez de llaves publicas y privada.
Para eso existe un canal de comunicacion en donde los 2 usuario sea A y B.
A: genera 2 clave 1 publica y 1 privada.
B: genera 2 clave 1 publica y 1 privada.
La funciones de encriptacion y desenciptacion en RSA funciona de la siguiente manera
1.Escoger dos grandes números primos, p y q (secretos), y calcular el numero n (publico) correspondiente a su producto,
n = p*q.
2. Se calcula fi: Φ (n)=(p-1)*(q-1)
3. Se calcula un número natural e de manera que MCD(e,fi(n))=1, es decir e debe ser primo relativo de fi(n).
Calcular el entero e (publico) tal que 1=<e<=Φ(n).
4.- Mediante el algoritmo extendido de Euclides se calcula d:
E*d mod fi(n)=1
También puede calcularse con: d=((Y*fi(n))+1)/e Para todo Y=1,2,3,... hasta encontrar un d entero que satisfaga la ecuacion .
5.- El par de números (e,n) son la clave pública.
6.- El par de números (d,n) son la clave privada.
EJEMPLO Explicado...
1. Si alguien quiere mandar un mensaje m a algún usuario, entonces la clave pública n y e del receptor para generar el cifrado C.
C = m^e MOD n
n y e = son las claves publicas
2. Entonces el mensaje C puede viajar sin problema por cualquier canal inseguro.
3. Cuando la información cifrada llega a su destino el receptor procede a descifrar el mensaje con la siguiente fórmula.
m = C^d MOD n
4. Se puede mostrar que estas formulas son inversas y por lo tanto dan el resultado deseado. m y e son públicos y se pueden considerar como la clave pública, la clave privada es la pareja (p y q) o equivalentemente el número d.
Ejemplo con numeros asi se entiende mas facil
Código
Ejemplo 1.- p=3 y q=11. //numeros primos 2.- n = 3 * 11 = 33. 3.- fi(n) = (3-1) * (11-1) = 20. 4.- Buscamos e=3, tal que MCD(e,fi(n))=1 5.- d = ((Y * fi(n)) + 1) / e = ( Y * 20 + 1) / 3 = 21 / 3 = 7 6.- e=3 y n=33 son la clave pública. 7.- d=7 y n=33 son la clave privada. Cifrado: Mensaje = 5, C = M^e mod n => 5^3 mod 33 = 26 Descifrado: C = 26 M = C^d mod n = 26^7 mod 33 => 8031810176 mod 33 = 5
Cualquier duda consulten
y agradescan igual ¬¬
xD
saludos aqui dejo un codigo en java que cifra y decifra con RSA
Aqui dejo un codigo en java para usar RSA , permite pasarle como parametro el tamaño de los numeros primero que se generan para cifrar
Main.java
Código
import java.io.*; import java.math.BigInteger; public class Main { /** * @param argumentos de la linea de comandos */ if(args.length != 1) { args[0]="1024"; } RSA rsa = new RSA(tamPrimo); for(int i=0; i<textoCifrado.length; i++) { if(i != textoCifrado.length-1) } } }
RSA.java
Código
/* * RSA.java * * */ import java.math.BigInteger; import java.util.*; /** * * @author */ public class RSA { int tamPrimo; BigInteger n, q, p; BigInteger totient; BigInteger e, d; /** Constructor de la clase RSA */ public RSA(int tamPrimo) { this.tamPrimo = tamPrimo; generaPrimos(); //Genera p y q generaClaves(); //Genera e y d } public void generaPrimos() { while(q.compareTo(p)==0); } public void generaClaves() { // n = p * q n = p.multiply(q); // toltient = (p-1)*(q-1) // Elegimos un e coprimo de y menor que n // d = e^1 mod totient d = e.modInverse(totient); } /** * cifra el texto usando la clave publica * * @param mensaje Ristra que contiene el mensaje a cifrar * @return El mensaje cifrado como un vector de BigIntegers */ { int i; byte[] temp = new byte[1]; byte[] digitos = mensaje.getBytes(); for(i=0; i<bigdigitos.length;i++){ temp[0] = digitos[i]; } for(i=0; i<bigdigitos.length; i++) cifrado[i] = bigdigitos[i].modPow(e,n); return(cifrado); } /** * descifra el texto cifrado usando la clave privada * * @param cifrado Array de objetos BigInteger que contiene el texto cifrado que seraoct descifrado * @return The decrypted plaintext */ for(int i=0; i<descifrado.length; i++) descifrado[i] = cifrado[i].modPow(d,n); char[] charArray = new char[descifrado.length]; for(int i=0; i<charArray.length; i++) charArray[i] = (char) (descifrado[i].intValue()); } }
aqui las cap