[Aporte] Cifrar texto en RSA en java

Iniciado por Tronos154, 19 Febrero 2016, 18:24 PM

0 Miembros y 1 Visitante están viendo este tema.

Tronos154

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.  :D :D :D

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;
   }

}