BandaAncha

  • 🔍 en 📰 artículos ⏎
  • 🔍 en 💬 foros ⏎
  • 🔍 en 👇 este 💬 foro ⏎
  • 🔍 en 👇 este 💬 tema ⏎
Regístrate Regístrate Identifícate Identifícate

recuperar contraseña de un JpasswordField (java)

BocaDePez

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 está cerrado a nuevas respuestas. Abre un nuevo tema para retomar la conversación.
BocaDePez

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.

🗨️ 5
BocaDePez

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

🗨️ 4
BocaDePez

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.

🗨️ 3
BocaDePez

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

🗨️ 2
BocaDePez
BocaDePez
🗨️ 1
BocaDePez
BocaDePez