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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


  Mostrar Mensajes
Páginas: [1] 2 3 4 5 6 7 8 9
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 / Re: Duda sobre JProcessBar en: 15 Febrero 2016, 14:30 pm
No conozco muy bien la librería swing,pero para el tema del tiempo puedes ayudarte del método System.currentTimeMillis() el cual junto a una simple resta puedes determinar el tiempo que lleva tu programa en funcionamiento y asi poder cambiar la barra cuando pase un determinado tiempo.
4  Programación / Java / Re: Duda con la librería BigInteger en: 13 Febrero 2016, 18:00 pm
Vale, muchas gracias 0xFer por tu ayuda  :) :) :)
5  Programación / Java / Re: Duda con la librería BigInteger en: 13 Febrero 2016, 17:31 pm
Pero si le asigno el valor 1 a la variable la probabilidad de que sea primo es de un 50% , ¿ no tendría que intentar asignarle el valor mas alto posible para poder minimizar el error ?  :huh: :huh: :huh:
6  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.
 
7  Programación / Java / Re: El cifrador de Polybios en: 26 Enero 2016, 21:30 pm
Ante todo gracias por la ayuda Crack81 , he estado observando tu código y mas o menos es igual al mio exceptuando que el array que creas en las primeras lineas es fijo para cualquier texto que cifres,en cambio en el mio  la coordenada de una letra varia dependiendo del numero de filas o columnas que le digas.He estado modificando mi código con el método StringBuilder pero sigue dándome valores incorrectos al cifrar un texto  :-( :-( :-(
8  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.  
9  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.
10  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));
    }}
Páginas: [1] 2 3 4 5 6 7 8 9
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines