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

[SOLUCIONADO] Encriptación de Symonfy pero en Java

Estas en el tema de Encriptación de Symonfy pero en Java en el foro de Java en Foros del Web. Hola. Espero puedan ayudarme con este problema que ya llevo varios días con el y no he podido resolver, que a continuación explico. Tengo una ...
  #1 (permalink)  
Antiguo 23/03/2015, 18:21
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Encriptación de Symonfy pero en Java

Hola. Espero puedan ayudarme con este problema que ya llevo varios días con el y no he podido resolver, que a continuación explico.

Tengo una página web en Symfony2 donde los usuarios generan sus cuentas con un usuario y una contraseña. Symfony se encarga de codificar la contraseña con un algoritmo que pondré más adelante.

Me gustaría igualar la codificación que usa Symfony2 pero en Java. A continuación pongo el algoritmo que Symfony usa y lo que llevo de código.

Codificación de Symfony2
Código PHP:
    public function encodePassword($password$salt)
    { 
        
$salted $password.'{'.$salt.'}';        
        
$digest hash('sha512'$saltedtrue);

        
// "stretch" hash
        
for ($i 1$i 5000$i++) {
            
$digest hash('sha512'$digest.$saltedtrue);
        }

        return 
base64_encode($digest);
    } 
My codificación en Java
Código Java:
Ver original
  1. public static String encryptPassword(String password,String salt) throws NoSuchAlgorithmException{
  2.  
  3.         MessageDigest md = MessageDigest.getInstance("SHA-512");
  4.         if (md != null) {
  5.             String salted = password + '{'+salt+'}';
  6.             md.reset();
  7.  
  8.             for (int i = 0; i < 5000 ; i++) {
  9.                 md.update(salted.getBytes());
  10.  
  11.             }
  12.             byte byteData[] = md.digest();
  13.  
  14.             String base64 = Base64.encodeToString(byteData, Base64.NO_WRAP);
  15.             System.out.println("passCodificada: "+base64);
  16.  
  17.             return base64;
  18.  
  19.         }
  20.         return password;
  21.     }

Pero no me funciona, espero pudan ayudarme. Saludos
  #2 (permalink)  
Antiguo 24/03/2015, 02:52
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Encriptación de Symonfy pero en Java

¿Qué significa no me funciona? ¿Te da un error o no obtienes el resultado que querías?

Si te da error habría que ver el error, si no es el resultado, ya que tienes muchas iteraciones, te diría que empezaras por analizar si cada iteración obtiene el mismo resultado que en PHP. Haz pruebas sencillas, empieza por cifrar sólo tu salted para ver que obtienes el mismo valor, luego añade una iteración.

Aparte de eso, veo el Base64.NO_WRAP, que si no me equivoco es de una librería de android.
__________________
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.
  #3 (permalink)  
Antiguo 24/03/2015, 13:33
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Encriptación de Symonfy pero en Java

Gracias por tu pronta respuesta Xerelo
Me refiero a que el resultado no es el indicado.
Probé lo que me sugeriste y si quito el for en las dos codificaciones, el resultado es el mismo. Mi error está en el for, no estoy haciendo las iteraciones como se debe. Desde la primera iteración ya me falla. Prove a poner el for de esta forma.

Código Java:
Ver original
  1. String salted = password + '{'+salt+'}';
  2.             byte[] saltByte = salt.getBytes();
  3.             md.reset();
  4.             md.update(salted.getBytes());
  5.             byte[] byteData = md.digest();
  6.  
  7.             byte[] combined ;
  8.             for (int i = 1; i < 2 ; i++) {
  9.  
  10.                 combined = CombinedByte(byteData, saltByte); // De acuerdo a la codificación en php se concatena el ultimo digest con el salt. Pero no se si lo estoy haciendo bien
  11.  
  12.                 md.update(combined);
  13.                 byteData = md.digest();
  14.             }
  15.  
  16.  
  17.             String base64 = Base64.encodeToString(byteData, Base64.NO_WRAP);
  18.             System.out.println("passCodificada: "+base64); // No imprime el valor deceado
  19.  
  20.             return base64;
Metodo CombinedByte()
Código Java:
Ver original
  1. private byte[] CombinedByte(byte[] one, byte[] two){
  2.  
  3.         byte[] combined = new byte[one.length + two.length];
  4.         for (int i = 0; i < combined.length; ++i){
  5.             combined[i] = i < one.length ? one[i] : two[i - one.length];
  6.         }
  7.         return combined;
  8.     }

Creo que mi error esta al momento de concatenar el ultimo digest y el salt. :/
Ayuda porfavor llevo 1 semana con este problema .-.
  #4 (permalink)  
Antiguo 25/03/2015, 03:16
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años
Puntos: 306
Respuesta: Encriptación de Symonfy pero en Java

Lo has hecho bien, el único error que has cometido es este

Cita:
combined = CombinedByte(byteData, saltByte);
En cada iteración lo que tienes que añadir es salted.getBytes(), porque lo que se concatena es password{salt} no salt.

He probado tú código cambiando eso y me ha funcionado (he usado la libreria apache para el base64 pero no debería influir).

1ª iteracion
9KY7spEeho0Khi1u0cHhv266KMvmTTWZ25Zxx5iWAFcFiB/6F3+8S6yABxMz5EuGKXqA/HDx5o5tgMU+UKR9xg==

2ª iteracion
+v/TgUe7cZs/FjRobiWLedJTvn9qhH1EwgT/gJDOQvNg+XdxppzBVXKPhUm3huPgpXaLw9N/0bz48zO+wd97eg==

Casi se me olvida, para estos valores he usado
password=pass
salt=salt
__________________
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.

Última edición por Xerelo; 25/03/2015 a las 03:22
  #5 (permalink)  
Antiguo 25/03/2015, 12:39
 
Fecha de Ingreso: febrero-2014
Ubicación: Edo. México
Mensajes: 85
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Encriptación de Symonfy pero en Java

Mi estimado. Me has salvado, muchas gracias ^^
Funciono perfecto

Etiquetas: string
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 10:18.