elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: [1] 2 3
1  Programación / Java / [Aporte] Cifrar texto en RSA en java en: 19 Febrero 2016, 18:24 pm
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
  1. package RSA;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.Random;
  5. import java.util.ArrayList;
  6. import ClavePublica.ClavePublica;
  7. import ClavePrivada.ClavePrivada;
  8. import Euler.Euler;
  9.  
  10. /**
  11.  * Codificación en RSA
  12.  *
  13.  * Autor: Tronos154
  14.  */
  15.  
  16. public class RSA {
  17.  
  18.    public Random rnd1 = new Random();
  19.    public Random rnd2 = new Random();
  20.    public int bitsLength = (int) Math.random() * 56 + 200;
  21.  
  22.    public BigInteger primo1 = BigInteger.probablePrime(bitsLength, rnd1);
  23.    public BigInteger primo2 = BigInteger.probablePrime(bitsLength, rnd2);
  24.    public BigInteger modulo = primo1.multiply(primo2);
  25.  
  26.    public BigInteger euler = Euler.Euler(primo1, primo2);
  27.  
  28.    public BigInteger clavePublica = ClavePublica.ClavePublica(euler);
  29.    public BigInteger clavePrivada = ClavePrivada.ClavePrivada(clavePublica, euler);
  30.  
  31.    public String cifrar(String texto) {
  32.  
  33.        char letra;
  34.        int letra2 = 0;
  35.        String textoEncriptado = "";
  36.        String letra3 = "";
  37.        int contador = 0;
  38.  
  39.        while (contador < texto.length()) {
  40.            letra = texto.charAt(contador);
  41.            letra2 = letra;
  42.            letra3 = String.valueOf(letra2);
  43.            BigInteger numero = new BigInteger(letra3);
  44.            textoEncriptado = textoEncriptado + (numero.modPow(clavePublica, modulo)).toString() + " ";
  45.            contador++;
  46.        }
  47.        return textoEncriptado;
  48.    }
  49.  
  50.    public String descifrar(String textoEncriptado) {
  51.        String textoDesencriptado = "";
  52.        String textoAlmacen = "";
  53.        char letra = 0;
  54.        for (int i = 0; i < textoEncriptado.length(); i++) {
  55.            if (textoEncriptado.charAt(i) == 32) {
  56.                BigInteger numero = new BigInteger(textoAlmacen);
  57.                letra = (char) (int) (numero.modPow(clavePrivada, modulo).longValue());
  58.                textoDesencriptado = textoDesencriptado + letra;
  59.                textoAlmacen = "";
  60.  
  61.            } else {
  62.                textoAlmacen = textoAlmacen + textoEncriptado.charAt(i);
  63.            }
  64.  
  65.        }
  66.        return textoDesencriptado;
  67.    }
  68.  
  69.  
  70.  
  71. }
  72.  

Librerías que se han creado para el programa:

Clave Publica:
Código
  1. package ClavePublica;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.ArrayList;
  5. import java.util.Random;
  6. /**
  7.  * Generador Clave Publica
  8.  *
  9.  *
  10.  * Autor : Tronos154
  11.  *
  12.  */
  13. public class ClavePublica {
  14.  
  15.    public static BigInteger ClavePublica(BigInteger euler) {
  16.  
  17.  
  18.        BigInteger ONE = BigInteger.ONE;
  19.        BigInteger ZERO = BigInteger.ZERO;
  20.        BigInteger Euler2 = euler.subtract(ONE);
  21.        Boolean enc = false;
  22.  
  23.        while (enc == false && Euler2.compareTo(ONE) == 1) {
  24.  
  25.            if ((euler.gcd(Euler2)).toString().equals("1")) {
  26.                enc = true;
  27.  
  28.  
  29.            } else {
  30.                Euler2 = Euler2.subtract(ONE);
  31.            }
  32.        }
  33.  
  34.       return Euler2;
  35.    }
  36.  
  37. }
  38.  

Clave Privada:

Código
  1. package ClavePrivada;
  2. import java.math.BigInteger;
  3.  
  4. /** Clave Privada
  5.  *
  6.  * Autor : Tronos154
  7.  *
  8.  */
  9. public class ClavePrivada {
  10.    public static BigInteger ClavePrivada (BigInteger clavePublica , BigInteger euler) {
  11.        BigInteger clavePrivada = clavePublica.modInverse(euler);
  12.        return clavePrivada;
  13.    }
  14. }
  15.  

Función Euler :

Código
  1. package Euler;
  2.  
  3. import java.math.BigInteger;
  4. import java.util.ArrayList;
  5.  
  6. /**
  7.  *
  8.  * Autor : Tronos154  
  9.  */
  10. public class Euler {
  11.  
  12.    public static BigInteger Euler(BigInteger primo1, BigInteger primo2) {
  13.        BigInteger ONE = BigInteger.ONE;
  14.        BigInteger Euler;
  15.        Euler = (primo1.subtract(ONE)).multiply(primo2.subtract(ONE));
  16.        return Euler;
  17.    }
  18.  
  19. }
  20.  
2  Programación / Java / Metodo eficiente para poder factorizar un numero en: 16 Febrero 2016, 21:32 pm
Buenas,como no he encontrado ningún foro de matemáticas en esta web he deducido que debía postear mi duda aquí,he estado trabajando en un programa en java para cifrar en RSA un texto dado,hasta aquí todo bien,el problema es que cuando hay que factorizar el numero hallado de multiplicar los dos números primos el proceso es muy costoso de la forma en que lo he planteado.Mi pregunta es,¿existe algún algoritmo para factorizar un numero dado?,dejo el método en Java que he creado para factorizar,pero este no es del todo eficiente ya que falla para números muy altos.

Código
  1. public class Factorizar {
  2.  
  3.    public static ArrayList<BigInteger> Factorizar(BigInteger modulo) {
  4.  
  5.        BigInteger ONE = BigInteger.ONE;
  6.        BigInteger ZERO = BigInteger.ZERO;
  7.        BigInteger primosBig[] = ArrayPrimos.ArrayPrimos(); // Crea una lista de arrays con los numeros primos que hay desde el 2 hasta el 1000000 para poder factorizar el BigInteger.
  8.  
  9.        ArrayList<BigInteger> almacenFactores = new ArrayList<>();
  10.        int cont1 = 0;
  11.        int cont2 = 0;
  12.        int certainty = 100; //Revisar el valor que toma el certanity.
  13.  
  14.        while (modulo != ONE) {
  15.  
  16.            if (modulo.isProbablePrime(certainty)) {
  17.  
  18.                almacenFactores.add(cont2, modulo);
  19.                return almacenFactores;
  20.  
  21.            }
  22.  
  23.            if ((modulo.remainder(primosBig[cont1])) == ZERO) {
  24.  
  25.                modulo = modulo.divide(primosBig[cont1]);
  26.                almacenFactores.add(cont2, primosBig[cont1]);
  27.                cont1 = 0;
  28.                cont2++;
  29.  
  30.            } else {
  31.  
  32.                cont1++;
  33.            }
  34.  
  35.        }
  36.        return almacenFactores;
  37.  
  38.    }
  39. }
3  Programación / Java / Duda con la librería BigInteger en: 13 Febrero 2016, 15:55 pm
Buenas,estoy trabajando con la librería BigInteger y tengo que usar el método .isProbablePrime(int certanity) que devuelve un boolean diciendo si el BigInteger es primo o compuesto,la duda me surge en que no se que valor tiene que tomar certanity,he leido que sirve para determinar la precisión en que te devuelve si es primo o compuesto,basándose en esta formula 1-((1/2)^certanity) , pero no se que valor determinar para esta variable.
 
4  Programación / Java / El cifrador de Polybios en: 26 Enero 2016, 18:47 pm
Buenas gente,he estado intentando hacer un método en Java que dado dos valores enteros y una palabra crea una matriz de las dimensiones de estos dos valores y a cada posición de la matriz le asigna el valor ordenado del alfabeto,después coge cada letra de la palabra y almacena en un String los valores en los cuales se sitúa cada letra de la palabra en la matriz.  El problema es que este me devuelve unos valores que no corresponden a los previstos cuando cifro la palabra manualmente,llevo varios días dándole vueltas al problema y no encuentro el error. Estaría muy agradecido si alguno me muestra el error que yo no he sabido encontrar. Un saludo.



Código
  1. public class CifradoPolybios {
  2.  
  3.    public String cifrar(int fila, int columna, String cadena) {
  4.        if ((fila * columna) < 27) {
  5.            fila = 5;
  6.            columna = 6;
  7.        }
  8.        char[][] leyenda = new char[fila][columna];                 //Array donde se le asigna los valores al abecedario.
  9.        int contadorFila = 0;
  10.        int contadorColumna = 0;
  11.        int contadorAbecedario = 96;
  12.        char letra;
  13.        while (contadorFila < fila) {                               //Bucle que da valores al array correspondientes con el abecedario.
  14.  
  15.            leyenda[contadorFila][contadorColumna] = (letra = (char) contadorAbecedario);
  16.  
  17.            if (contadorColumna == (columna - 1)) {
  18.                contadorColumna = 0;
  19.                contadorFila++;
  20.            } else {
  21.                contadorColumna++;
  22.                contadorAbecedario++;
  23.            }
  24.        }
  25.        contadorFila = 0;
  26.        contadorColumna = 0;
  27.        cadena = cadena.toLowerCase();
  28.        int contadorLetra = 0;
  29.        String cadenaEncriptada = null;                                 //Variable que almacena la palabra una vez cifrada.
  30.        while (contadorLetra < cadena.length()) {                       //Bucle que cifra la palabra usando el array una vez ha sido asignado el valor.
  31.            if (cadena.charAt(contadorLetra) == ((char) 32)) {
  32.                contadorLetra++;
  33.            }
  34.            if (cadena.charAt(contadorLetra) == leyenda[contadorFila][contadorColumna]) {
  35.                if (cadenaEncriptada == null) {
  36.                    cadenaEncriptada = String.valueOf(contadorFila) + "" + String.valueOf(contadorColumna) + "";
  37.                }
  38.                cadenaEncriptada += String.valueOf(contadorFila) + "" + String.valueOf(contadorColumna) + "";
  39.                contadorLetra++;
  40.                contadorFila = 0;
  41.                contadorColumna = 0;
  42.            } else {
  43.  
  44.                if (contadorColumna == (columna - 1)) {
  45.                    contadorColumna = 0;
  46.                    contadorFila++;
  47.                } else {
  48.                    contadorColumna++;
  49.                }
  50.            }
  51.        }
  52.        return cadenaEncriptada;
  53.    }
  54. }
  55.  
5  Informática / Hardware / Refrigeracion liquida para portatil en: 10 Agosto 2015, 20:10 pm
Buenas,estoy planteandome hacer una "refrigeracion liquida" para mi portatil parecida a esta;http://www.instructables.com/id/Watercooling-a-laptop-on-the-cheap/.Pero tengo algunas dudas que me gustaría que me intentaseis aclarar.¿La refrigeracion liquida podria crear humedad suficiente para estropear el portatil?,¿Es o no una buena idea para solucionar las altas temperaturas del portatil?.Un saludo y gracias de antemano.

PD:He metido este post sin querer en esta sección y no en el sub-foro de refrigeracion que he visto,lo siento por mi metedura de pata. :-\ :-\ :-\




[MOD] Tema movido.
6  Programación / Java / Problema en operaciones con Java. en: 1 Agosto 2015, 16:51 pm
Buenas,estoy intentando hacer una especie de programa en Java a modo de ejercicio que básicamente resuelve operaciones básicas,una especie de calculadora.El problema es que cuando le indico los valores a operar solo acierta una operación y las otras da valores que no tienen nada que ver con lo que quiero que salga.Les adjunto el código para que puedan echarle un vistazo y ver si hay algún error.
Código:
package calculadora;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

/**
 *
 * @author
 */
public class Calculadora {

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) throws Exception {
        System.out.println("Introduzca el primer valor numerico y pulse enter.");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            int a=br.read();
            System.out.println("Introduzca el segundo valor numerico y pulse enter");
        BufferedReader bd = new BufferedReader(new InputStreamReader(System.in));
            int b=bd.read();
        System.out.println("La suma de estos valores es:"+(a+b));
        System.out.println("La resta de estos valores es:"+(a-b));
        System.out.println("La multiplicacion de estos valores es:"+(a*b));
        System.out.println("La division de estos valores es:"+(a/b));
        System.out.println("El resto de la division de estos valores es:"+(a%b));
    }}
7  Informática / Hardware / Dudas a la hora de comprarme un portatil en: 21 Julio 2015, 15:26 pm
Buenas a todos,voy a comenzar la carrera de ingeniería informática y he decidido comprarme un portátil para esta,he estado mirando muchos portátiles con la intención de encontrar uno con las mejores prestaciones dentro de mi presupuesto 599 euros,al estar buscando portátiles me han surgido dudas las cuales espero que me podáis resolver.El portátil que me compre estará encendido muchas horas diarias (8h diarias mínimo XD) y como algunos sabréis el tema de la refrigeración en los portátiles suele ser bastante mala y he leido que los procesadores AMD suelen calentarse mas que los Intel pero estos son mas caros (mucho mas caros relación potencia-precio).¿Que me recomendáis Intel o AMD? y si alguno sabe de algún portátil que dentro de este presupuesto piense que esta genial le agradecería que me lo comentase.Un saludo y gracias de antemano.

De momento de todos los portátiles que he visto estos me han llamado la atencion,me gustaria que me dierais la opinión de estos dos:
 http://tiendas.mediamarkt.es/p/portatil-asus-f550ze-xx076h-amd-fx-76-1268954#prodinfotabspec
http://tiendas.mediamarkt.es/p/portatil-acer-e5-571g-i5-5200u-8gb-r-1280002#prodinfotabspec
8  Seguridad Informática / Hacking / Es seguro el blindado de los paquetes de Whatsapp? en: 10 Abril 2014, 23:04 pm
¿Es seguro el blindado de los paquetes de WhatsApp?.Tengo esta duda debido a que hace tiempo lei una noticia de que dos hackers españoles descubrieron que el blindado de estos paquetes era bastante inseguro ya que usa el cifrado RC4,un cifrado un poco endenble actualmente.¿WhatsApp sigue siendo tan inseguro,o a cambiado el cifrado de sus paquetes y ya es mas seguro?
9  Seguridad Informática / Hacking / Colisionamiento de hashes en: 25 Marzo 2014, 01:09 am
Tengo una duda la cual me gustaria que me aclarasen,¿como se puede generar un colisionamiento de dos hashes?,he averiguado que es 100% seguro de que dos hashes colisionen,pero ¿como puedo averiguar cual de todos colisionara?.Para aclararnos mejor por ejemplo la palabra hola genera este hash 4d186321c1a7f0f354b297e8914ab240,habra un momento en el que otra palabra distinta a hola genere este hash por lo cual se producira un colisionamiento,pero ¿como puedo predecir que palabra sera?
10  Seguridad Informática / Hacking / descifrar conversaciones WhatsApp en: 3 Marzo 2014, 21:45 pm
Buenas estuve probando a descifrar las conversaciones de whatsapp pero no hubo resultado,alguien me podria enseñar alguna forma de descifrar el archivo mgstore.db.crypt que es en el que se encuentras todas las conversaciones.Un Saludo.
Páginas: [1] 2 3
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines