Bueno,ante todo dar las gracias a los miembros de este foro por ayudarme con algunas dudas que me han surgido a la hora de hacer este programa.
Librerías que se han creado para el programa:
Clave Publica:
Clave Privada:
Función Euler :
Código (java) [Seleccionar]
package RSA;
import java.math.BigInteger;
import java.util.Random;
import java.util.ArrayList;
import ClavePublica.ClavePublica;
import ClavePrivada.ClavePrivada;
import Euler.Euler;
/**
* Codificación en RSA
*
* Autor: Tronos154
*/
public class RSA {
public Random rnd1 = new Random();
public Random rnd2 = new Random();
public int bitsLength = (int) Math.random() * 56 + 200;
public BigInteger primo1 = BigInteger.probablePrime(bitsLength, rnd1);
public BigInteger primo2 = BigInteger.probablePrime(bitsLength, rnd2);
public BigInteger modulo = primo1.multiply(primo2);
public BigInteger euler = Euler.Euler(primo1, primo2);
public BigInteger clavePublica = ClavePublica.ClavePublica(euler);
public BigInteger clavePrivada = ClavePrivada.ClavePrivada(clavePublica, euler);
public String cifrar(String texto) {
char letra;
int letra2 = 0;
String textoEncriptado = "";
String letra3 = "";
int contador = 0;
while (contador < texto.length()) {
letra = texto.charAt(contador);
letra2 = letra;
letra3 = String.valueOf(letra2);
BigInteger numero = new BigInteger(letra3);
textoEncriptado = textoEncriptado + (numero.modPow(clavePublica, modulo)).toString() + " ";
contador++;
}
return textoEncriptado;
}
public String descifrar(String textoEncriptado) {
String textoDesencriptado = "";
String textoAlmacen = "";
char letra = 0;
for (int i = 0; i < textoEncriptado.length(); i++) {
if (textoEncriptado.charAt(i) == 32) {
BigInteger numero = new BigInteger(textoAlmacen);
letra = (char) (int) (numero.modPow(clavePrivada, modulo).longValue());
textoDesencriptado = textoDesencriptado + letra;
textoAlmacen = "";
} else {
textoAlmacen = textoAlmacen + textoEncriptado.charAt(i);
}
}
return textoDesencriptado;
}
}
Librerías que se han creado para el programa:
Clave Publica:
Código (java) [Seleccionar]
package ClavePublica;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Random;
/**
* Generador Clave Publica
*
*
* Autor : Tronos154
*
*/
public class ClavePublica {
public static BigInteger ClavePublica(BigInteger euler) {
BigInteger ONE = BigInteger.ONE;
BigInteger ZERO = BigInteger.ZERO;
BigInteger Euler2 = euler.subtract(ONE);
Boolean enc = false;
while (enc == false && Euler2.compareTo(ONE) == 1) {
if ((euler.gcd(Euler2)).toString().equals("1")) {
enc = true;
} else {
Euler2 = Euler2.subtract(ONE);
}
}
return Euler2;
}
}
Clave Privada:
Código (java) [Seleccionar]
package ClavePrivada;
import java.math.BigInteger;
/** Clave Privada
*
* Autor : Tronos154
*
*/
public class ClavePrivada {
public static BigInteger ClavePrivada (BigInteger clavePublica , BigInteger euler) {
BigInteger clavePrivada = clavePublica.modInverse(euler);
return clavePrivada;
}
}
Función Euler :
Código (java) [Seleccionar]
package Euler;
import java.math.BigInteger;
import java.util.ArrayList;
/**
*
* Autor : Tronos154
*/
public class Euler {
public static BigInteger Euler(BigInteger primo1, BigInteger primo2) {
BigInteger ONE = BigInteger.ONE;
BigInteger Euler;
Euler = (primo1.subtract(ONE)).multiply(primo2.subtract(ONE));
return Euler;
}
}