Foros del Web » Programación para mayores de 30 ;) » Java »

como encriptar un numero en java

Estas en el tema de como encriptar un numero en java en el foro de Java en Foros del Web. Hola a todos en esta oportunidad quisiera que me ayudaran a como puedo cifrar un numero en Java. En php existe una funcion la MD5 ...
  #1 (permalink)  
Antiguo 29/02/2012, 16:36
Avatar de venezolana32  
Fecha de Ingreso: septiembre-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 3
Pregunta como encriptar un numero en java

Hola a todos en esta oportunidad quisiera que me ayudaran a como puedo cifrar un numero en Java. En php existe una funcion la MD5 pero no se si en JAVA es la misma. Gracias a todos por su valiosa colaboracion.
  #2 (permalink)  
Antiguo 01/03/2012, 06:37
 
Fecha de Ingreso: febrero-2011
Mensajes: 672
Antigüedad: 13 años, 9 meses
Puntos: 78
Respuesta: como encriptar un numero en java

http://www.mkyong.com/java/java-md5-hashing-example/
  #3 (permalink)  
Antiguo 01/03/2012, 06:52
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Te recomendaría que usaras el cifrado Blowfish. La implementación la tienes con BCrypt para java. Hay bastante información al respecto, ejemplos, etc.
  #4 (permalink)  
Antiguo 01/03/2012, 07:05
Avatar de venezolana32  
Fecha de Ingreso: septiembre-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 3
Respuesta: como encriptar un numero en java

Gracias por su ayuda, mejor es dos que uno!!! Ahora mismo los voy a probar y luego les comento como me fue.
  #5 (permalink)  
Antiguo 01/03/2012, 10:23
Avatar de venezolana32  
Fecha de Ingreso: septiembre-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 3
Respuesta: como encriptar un numero en java

jav_000 una pregunta ya me descargue las clases util y bcrypt pero no se como utilizarlo, sera que me puedes decir como lo puedo hacer????
  #6 (permalink)  
Antiguo 01/03/2012, 16:43
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Pondre un ejemplo para cifrar una variable llamada password, que es lo que te pasa el usuario en texto plano en el campo login:
Código PHP:

String password_cifrado 
BCrypt.hashpw(password_entradaBCrypt.gensalt());
//El siguiente paso sería almacenar en la bd ese password ya cifrado 
Todo eso teniendo el archivo BCrypt o bien en el mismo paquete o importado. Puedes echarle un vistazo a sus funciones para ver lo que hacen, y las excepciones que pueden dar.

Para comprobar si el password (en texto plano, sin cifrar) coincide con el password cifrado en la bd:
Código PHP:
//El primer argumento es el texto plano que te pasa el usuario, y el segundo es lo que recuperas de la bd.
boolean test checkpw(password_sin_cifrarpassword_recuperado);
if(
test)
    
//Si el password introducido es correcto... 
Un poco de historia del algoritmo blowfish (BCrypt es la implementación de este algoritmo) que nunca viene mal:

http://es.wikipedia.org/wiki/Blowfish
  #7 (permalink)  
Antiguo 02/03/2012, 16:30
Avatar de venezolana32  
Fecha de Ingreso: septiembre-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 3
Respuesta: como encriptar un numero en java

jav_000 Gracias por tan valioso aporte, ya tengo la clase lista pero no me reconoce el metodo

.gensalt() del BCrypt.

Que estara pasando, porque ya tengo los dos paquetes de la clase Bcrypt.
  #8 (permalink)  
Antiguo 02/03/2012, 16:42
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Mira que tengas ese método en tu clase BCrypt. Puedes bajarte la clase desde aquí:

https://gist.github.com/651613
  #9 (permalink)  
Antiguo 02/03/2012, 20:57
Avatar de venezolana32  
Fecha de Ingreso: septiembre-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 3
Respuesta: como encriptar un numero en java

Gracias nuevamente, lo que me faltaba era el metodo gensalt() y ya me funciona de maravilla.
__________________
En Dios creeemos.
  #10 (permalink)  
Antiguo 03/03/2012, 12:34
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Buenas tardes,

Necesito ayuda y como es parecido a lo que ocurría en este post os lo comento.

Tengo que encriptar una contraseña con blowfish y guardarla en un fichero de texto. Cerrar el programa y abrir el fichero en desencriptarlo.

El problema que tengo es el siguiente, en el propio programa, si encripto una contraseña y la vuelvo a desencriptar me funciona bien. Pero cuando lo encripto, lo guardo en un txt y lo abro con otro programa distinto, no me es capaz de desencriptarlo. Me sale un error de padding o me dice que tiene que ser multiplo de 8 bytes...

¿Me podéis ayudar?

Llevo mucho tiempo dedicado y no se me ocurre nada y estoy atascado. Puedo postear ahora el código a ver si así os resulta más fácil...
  #11 (permalink)  
Antiguo 03/03/2012, 12:42
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

En la clase Blowfish, genero una contraseña:

Cita:
public class blowfish
{


private static String pass= "pruebapass";

public static void main(String[] args) throws Exception {


KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");
SecretKey secretkey = keygenerator.generateKey();
Cipher cipher = Cipher.getInstance("Blowfish");


//ENCRIPTAR PASS

cipher.init(Cipher.ENCRYPT_MODE, secretkey);
byte[] encriptarPASS = cipher.doFinal(pass.getBytes());


try{
FileWriter fw = new FileWriter(new File("/home/carlos/Escritorio/password.txt"));
PrintWriter pw = new PrintWriter(fw);
pw.println(encriptarUSER);
pw.close();

}
catch(IOException ex)
{
System.out.println("error");
}

Luego cierro programa y abro otro programa. Estamos en la clase VentanaLogin y leo:

Cita:
if (result == JFileChooser.APPROVE_OPTION){

byte [] aux;
String linea=null;


File file = fileChooser.getSelectedFile();


/***LECTURA DEL FICHERO ***/

try{
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
linea = br.readLine();

while(linea!=null)
{
KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");
SecretKey secretkey = keygenerator.generateKey();
Cipher cipher = Cipher.getInstance("Blowfish");

cipher.init(Cipher.ENCRYPT_MODE, secretkey);


aux=linea.getBytes();
byte [] usuario = cipher.doFinal(aux);

JOptionPane.showMessageDialog(null, new String(usuario));

//bf.DESEncriptar_Usuario(aux);
linea=br.readLine();

}
br.close();
}



catch(IOException ex)
{
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
  #12 (permalink)  
Antiguo 03/03/2012, 12:42
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Descifrar una clave cifrada con blowfish? Eso no se puede. La gracia del algoritmo consiste en que puedes ir de Texto plano -> Clave cifrada, pero no al revés. Lo que se hace es cifrar la clave y almacenarla cifrada. A la hora de comprobar si la clave que te pasa el usuario es la correcta, cifras esa clave que te pasa, y comparas la clave cifrada del usuario, con la clave cifrada que tenías almacenada.

La forma de descifrar una clave cifrada con blowfish sería usando un diccionario de claves cifradas, que ya entrarían en "técnicas hacking". Además si se usa un salto (con el método genSalt), se dificultaría a un atacante el poder descifrar la clave.
  #13 (permalink)  
Antiguo 03/03/2012, 12:46
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Entiendo y ¿hay algún método para hacer lo que yo quiero?

Lo único que quiero hacer es escribir un usuario y contraseña en una hoja de texto encriptado como sea. Entonces cuando el programa arranque, el usuario selecciona el archivo con su nombre (carlos.txt) y luego pondrá usuario y contraseña y deberá coincidir con la del fichero de texto que está encriptado.

¿Es posible hacer eso aunque sea con otra clase, otro modo de encriptar o algo?

Muchas gracias por tu respuesta jav_000
  #14 (permalink)  
Antiguo 03/03/2012, 12:51
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Lo que tienes que hacer es lo que te dije arriba. Te pondré un ejemplo:

Digamos que el usuario pone tiene como clave la cadena "1234". Cifras su clave y la guardas. Imaginemos que la clave cifrada es "ABCD". Cuando el usuario quiera volver a entrar pides el password. El te pasa el password, por ejemplo "1234". Ese password que te ha pasado lo cifras, obteniendo "ABCD". Finalmente comparas el password que te acaba de pasar, cifrado, con lo que tenías guardado. Es igual "ABCD" y "ABCD"? Sí, entonces login correcto. Si el usuario te pone otra clave distinta de "1234" al cifrarla no se convertirá en "ABCD", y no coincidirá.

Es una explicación muy a grandes rasgos de lo que hace blowfish, aunque debajo del algoritmo haya muchísima más teoría.
  #15 (permalink)  
Antiguo 03/03/2012, 13:11
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Muchas gracias, ahora si lo he entendido.

Supongo que a mi me falla porque estoy encriptando un usuario en una hoja de texto con una secretkey al azar y cuando la vuelvo a desencriptar genero otra secretkey distinta a la que había creado antes.

Porque siempre que encripto antonio, me pone la misma cadena, pero la secretkey es una key generada con un random.

Ya he entendido lo que me has dicho jav_000 perdona por mi torpeza y gracias por tu explicación.

PD: Voy a intentar hacerlo a ver si me sale ;)
  #16 (permalink)  
Antiguo 03/03/2012, 13:51
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

No me funciona jav_000

Con el programa 1 encripto Juan y lo guardo en admin.txt y me pone [B@6b7920
Con el programa 2, el usuario mete Juan, y cuando lo encripto no coincide con admin.txt. El resultado es [B@12d4551

No coinciden... ¿Como puede ser eso?
  #17 (permalink)  
Antiguo 03/03/2012, 13:58
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Estás usando el propio método de BCrypt?

Sería así:

Código PHP:
String password_entrada //password en texto plano
String passwordCifradoBD //password cifrado obtenido de la bd
boolean valid BCrypt.checkpw(password_entradapasswordCifradoBD); 
Y ya tendrías en tu variable valid true o false según esté bien la clave o no.

Aquí tienes la implementación original para java:
http://www.mindrot.org/projects/jBCrypt/
  #18 (permalink)  
Antiguo 03/03/2012, 14:03
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

yo estoy usando

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;



KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");
SecretKey secretkey = keygenerator.generateKey();
Cipher cipher = Cipher.getInstance("Blowfish");



//ENCRIPTACION
cipher.init(Cipher.ENCRYPT_MODE, secretkey);

y AQUI ENCRIPTO


//DESENCRIPTACION
cipher.init(Cipher.DECRYPT_MODE, secretkey);

y AQUI DESENCRIPTO


Voy a ver si con lo que me comentas funciona ;)

Gracias.
  #19 (permalink)  
Antiguo 03/03/2012, 14:03
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: como encriptar un numero en java

Cita:
Iniciado por caruizj Ver Mensaje
No me funciona jav_000

Con el programa 1 encripto Juan y lo guardo en admin.txt y me pone [B@6b7920
Con el programa 2, el usuario mete Juan, y cuando lo encripto no coincide con admin.txt. El resultado es [B@12d4551

No coinciden... ¿Como puede ser eso?
Por el formato de las cadenas, creo que no estás guardando la cadena cifrada en el txt, sino la referencia que usa java para el objeto.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #20 (permalink)  
Antiguo 03/03/2012, 14:16
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Cita:
Iniciado por Xerelo Ver Mensaje
Por el formato de las cadenas, creo que no estás guardando la cadena cifrada en el txt, sino la referencia que usa java para el objeto.
Si lo grabo como bytes [] se guarda así.

Si lo grabo como string se guarda &"/���

Así que no sé si se está guardado bien...

Por cierto para usar JBcrypt tengo que importar BCrypt.java???

Es que al implementar el código no me renoce BCrypt...

Gracias Xerelo por tu ayuda.
  #21 (permalink)  
Antiguo 03/03/2012, 14:18
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Tienes que tener la clase dentro de tu proyecto, claro. No vale importar porque esa clase en concreto no viene en el paquete de seguridad de java. El link directo a su descarga es este:

http://www.mindrot.org/files/jBCrypt/jBCrypt-0.3.zip

Es bastante fácil de usar.
  #22 (permalink)  
Antiguo 03/03/2012, 14:28
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Puff, creo que soy demasiado (bastante) torpe porque estoy en eclispe, con proyecto Prueba e importo jBCrypt-03 y hay clases que me dice error.

Jaja, ya veo que Java no es lo mio, que torpe soy :B
  #23 (permalink)  
Antiguo 03/03/2012, 14:30
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Importa solamente la clase necesaria (BCrypt), no toda la carpeta.
  #24 (permalink)  
Antiguo 03/03/2012, 14:44
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Pues tampoco funciona porque hago lo siguiente:
String password = "prueba";


Código:
String hashed = BCrypt.hashpw(password, BCrypt.gensalt());

//AQUI METO Hashed en prueba.txt

Y en prueba.txt me mete un string bastante largo

Cita:
$2a$12$vVbpNaFf7dOeldJmWLj33e8rm/9zrjLQJeBzrNaVqNcJISQdBv1ZG

Ahora voy al programa que estoy haciendo, he importado bcrypt tambien y compruebo que el usuario ponga prueba, lo encripto y no coincide con el prueba que encripte antes en el otro programa.

Cita:
$2a$12$n3oXT69uEmiAoirNLhKqLejNGS49n5fiig22apNT.Gt Ip5hGVuqkC
Dios, creo que lo voy a dejar, es imposible hacerlo T_T y encima más torpe no puedo ser, jaja.

Muchas gracias por toda la ayuda, se agradece.
  #25 (permalink)  
Antiguo 03/03/2012, 14:49
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

No tienes que hacerlo así. Si cifras con BCrypt la misma clave siempre te va a generar algo distinto, pero manteniendo la cabecera. Si te fijas en ambas cadenas cifradas, el comienzo es este: "$2a$12$". Si usas el método estático checkpw verás como obtienes un true, al tener la misma cadena de origen.

Si usas otro método para cifrar, por ejemplo SHA, sí que obtienes la misma cadena al cifrar dos veces una palabra.
  #26 (permalink)  
Antiguo 03/03/2012, 14:57
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Entonces si encripto Juan, lo guardo en fichero.txt y luego en un JTextField escribo Juan, lo encripto otra vez, lo unico que tengo que comprobar es solamente si coinciden $2a$12$ en ambos???

Es que compruebo

$2a$12$vVbpNaFf7dOeldJmWLj33e8rm/9zrjLQJeBzrNaVqNcJISQdBv1ZG
$2a$12$n3oXT69uEmiAoirNLhKqLejNGS49n5fiig22apNT.Gt Ip5hGVuqkC

Y me da false :S
  #27 (permalink)  
Antiguo 03/03/2012, 15:01
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Cita:
Iniciado por jav_000 Ver Mensaje
No tienes que hacerlo así. Si cifras con BCrypt la misma clave siempre te va a generar algo distinto, pero manteniendo la cabecera. Si te fijas en ambas cadenas cifradas, el comienzo es este: "$2a$12$". Si usas el método estático checkpw verás como obtienes un true, al tener la misma cadena de origen.

Si usas otro método para cifrar, por ejemplo SHA, sí que obtienes la misma cadena al cifrar dos veces una palabra.
Mi autocito :)

No tienes que comprobar usando equals las dos cadenas, obligatoriamente tienes que hacerlo con el método de BCrypt, checkpw. Si lo haces verás como obtienes true, y si metes otra clave errónea false.
  #28 (permalink)  
Antiguo 03/03/2012, 15:03
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Si si, si lo tengo hecho así:
Cita:
while(linea!=null)
{

Susuario=jtUsuario.getText();


JOptionPane.showMessageDialog(null, linea);

Scomprobar = BCrypt.hashpw(Susuario, BCrypt.gensalt());
//String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12));

JOptionPane.showMessageDialog(null, linea + "\n" + Scomprobar);
if (BCrypt.checkpw(linea, Scomprobar))
System.out.println("It matches");
else
System.out.println("It does not match");
en linea tengo Juan encriptado
y en Susuario, como pone en el codigo, es lo que escribo en el JTextField (jtUsuario).

Me sale por pantalla It does not match todo el rato... ¿qué puedo estar haciendo mal?
  #29 (permalink)  
Antiguo 03/03/2012, 15:09
Avatar de caruizj  
Fecha de Ingreso: marzo-2012
Ubicación: Málaga
Mensajes: 161
Antigüedad: 12 años, 8 meses
Puntos: 14
Respuesta: como encriptar un numero en java

Ya me funcionó Jav. El problema era mi lectura de fichero, lo leía como antes, como Bytes [].

Perdona me torpeza, ya se ha visto que soy muy novato y muy principiante.

Muchas gracias por tu ayuda.

PD: Me he echo replantearme si seguir probando esto o no, puede que no sea lo mio jaja.

Un saludo y mil gracias, te debo unas cañas, si eres del sur ya sabes.
  #30 (permalink)  
Antiguo 03/03/2012, 15:12
 
Fecha de Ingreso: agosto-2011
Ubicación: Madrid
Mensajes: 185
Antigüedad: 13 años, 2 meses
Puntos: 29
Respuesta: como encriptar un numero en java

Lo importante es que haya salido. Y eso de plantearte dejar eso pues depende. Si no te gusta investigar, pedir consejos en foros, aprender, etc, entonces déjalo, porque el camino que te espera si sigues en esto va a ser así siempre. Por otra parte si cosas como éste éxito te alegran el día, entonces continúa que no en todas las profesiones se pueden obtener éxitos a diario.

Etiquetas: encriptar, numero
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:46.