Banda Ancha EU

Comunidad de usuarios
de fibra, móvil y ADSL

hosting en interdominios
5.660 lecturas y 6 respuestas
  • Cerrado

    Boca de Pez Boca de Pez
    6

    recuperar contraseña de un JpasswordField (java)

    Hola

    Tengo una tabla en una base de datos en la que inserto algunos datos codificados usando un JpasswordField. La idea es hacer un login en el que luego, introduciendo la misma contraseña en un cuadro de dialogo, se debe comprobar si la contraseña coincide o no.

    El tema está en que la contraseña nunca coincide, es decir, si yo introduzco "a" en un cuadro de contraseña y "a" en el otro, el resultado codificado nunca es el mismo, por lo que supongo que debe haber alguna forma de recuperar el valor original, y no la encuentro, en la documentación no pone nada y por internet la unica solucion que encuentro es usar cuadros de texto normales (pero eso de seguro tiene poquito). ¿me podeis ayudar?.

    Gracias

    Este tema es antiguo y puede contener información obsoleta. Abre un nuevo tema para publicar tu mensaje.
    • Cerrado

      Boca de Pez Boca de Pez
      6

      No uso Java habitualmente pero me resulta extraño que haya…

      No uso Java habitualmente pero me resulta extraño que haya problemas con en el JPasswordField. Como no termino de entender exáctamente cómo estás planteando el problema, los temas de autenticación de usuarios suelen ir de la siguiente forma, muy resumidamente:

      Nuevo usuario:

      1. Obtener el password

      2. Aplicar una función hash unidireccional al password

      3. Guardar el resultado de la función hash en base de datos

      Login usuario:

      1. Solicitar el password

      2. Aplicar una función hash unidireccional al password (obviamente la misma que cuando se generó el usuario)

      3. Comparar el resultado de la función hash con el almacenado en la base de datos, si coincide la password es válida, en otro caso no

      En fin, parece un poco raro que obtengas distintos resultados para las mismas entradas, porque con el método getPassword() obtienes en claro el char[] con los caracteres introducidos en el JPasswordField y que se muestran ocultos... a partir de ahi es aplicar la función hash y almacenar/comparar con la base de datos.

      Saludos.

      • Cerrado

        Boca de Pez Boca de Pez
        6

        Hola el tema está en que el método getPassword() devuelve ya…

        Hola

        el tema está en que el método getPassword() devuelve ya los caracteres encriptados, y no los que introduce el usuario. Por lógica si un usuario pone "hola" en un campo de texto y "hola" en otro, el resultado encriptado debería ser el mismo, pero no es así.

        Al final lo he solucionado con el método getText(), que devuelve lo que se ha introducido desde ese campo pero sin codificar, sin embargo es un método deprecated y no está recomendado su uso.

        SAludos

        • Cerrado

          Boca de Pez Boca de Pez
          6

          JPasswordField es un componente que enmascara la entrada del…

          JPasswordField es un componente que enmascara la entrada del usuario pero no aplica ningún tipo de función hash a la misma, hasta donde yo sé.

          Por otro lado, según la documentación los métodos getPassword() y getText() devuelven exactamente el mismo resultado, es decir, el texto introducido por usuario. La unica diferencia es el tipo:

          getPassword() devuelve un array de caracteres (char[])

          getText() devuelve una cadena de caracteres (string)

          Por lo tanto lo que tienes muy probablemente es un problema de tipos. Si tu función hash necesita un string en lugar de un char[], tan fácil como hacer:

          new String(JPasswordField.getPassword())

          con eso estarías usando el método nuevo (en lugar del deprecated) pero obteniendo el resultado del JPasswordField como un string (como ocurría con el método antiguo).

          Saludos.

          • Cerrado

            Boca de Pez Boca de Pez
            6
            espero q no sea tarde pero te voy a decir como hacerlo sin…

            espero q no sea tarde pero te voy a decir como hacerlo sin usar getText()

            es sencillo solo debes de crear un objeto String con lo obtenido del campo password asi:

            el siguiente campo es el capo tipo contraseña de java

            jPasswordFieldContraseña = new javax.swing.JPasswordField();

            luego convierto el texto introduccido por el usuario en un String que esta decodificado

            String password = new String(jPasswordFieldContraseña.getPassword());

            ahora el String password tiene el texto sin encriptar que el usuario ingreso

            espero que les sirva