Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Cómo guardar contraseñas en una BD de forma segura
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Cómo guardar contraseñas en una BD de forma segura

Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Cómo guardar contraseñas en una BD de forma segura Responder citando

Estoy utilizando MySQL (Base de datos) y Delphi (lenguaje de programación). Tengo una tabla con los usuarios para el inicio de sesión en la aplicación. Me gustaría poder guardar las contraseñas de estos usuarios de forma segura en la tabla, de forma que si algún usuario accede a la tabla directamente no pueda ver las contraseñas de otros usuarios. Algo así como guardarlas encriptadas o algo.

¿existe alguna forma de encriptar las contraseñas mediante alguna función de MySQL?
MensajePublicado:
Mar Jun 26, 2007 8:44 am
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cómo guardar contraseñas en una BD de forma segura Responder citando



Anuncios



varios escribió:
Estoy utilizando MySQL (Base de datos) y Delphi (lenguaje de programación). Tengo una tabla con los usuarios para el inicio de sesión en la aplicación. Me gustaría poder guardar las contraseñas de estos usuarios de forma segura en la tabla, de forma que si algún usuario accede a la tabla directamente no pueda ver las contraseñas de otros usuarios. Algo así como guardarlas encriptadas o algo.

¿existe alguna forma de encriptar las contraseñas mediante alguna función de MySQL?


MySQL tiene varias funciones para este menester, puedes utilizar:

* PASSWORD (): aunque no es recomendable porque utiliza un algoritmo de encriptación simple

* SHA-1(): utiliza el algoritmo de encriptación SHA-1 160-bit.

* MD5(): utliza el algoritmo de encriptación MD5 128-bit. Calcula el HASH de la cadena de texto que se le pase como parámetro.

Un ejemplo de uso de alguna de estas funciones:

Código:

  select md5('contraseña_encriptada')
  from dual


devolverá: df5c9278585e5a37fdebde0e91eff4f3

Con lo cual, una forma de guardar las contraseñas de manera "segura" (como todo, no al 100%, pues estos algoritmos ya han sido rotos en varias ocasiones) sería la siguiente:

1. Al usuario, en la aplicación Delphi, le pedirás que introduzca una contraseña.

2. Al guardar esta contraseña lo puedes hacer con algo como esto:

Código:

insert into usuarios values
    (...., MD5(la_variable_con_la_constraseña), ....)


de esta forma en la base de datos, en la tabla "usuarios" se guardará el hash en MD5 de la contraseña, nunca la contraseña plana. Así, aunque se tenga acceso a la tabla de usuarios, nunca podrán saber la contraseña.

3. Para realizar la comprobación de si la contraseña introducida por el usuario es correcta (coincide con la de la base de datos), puesto que está en MD5, tendremos que hacer algo así para compararla:

Código:

  select nick, contrasena, nombre
  from usuarios
  where MD5(la_variable_con_la_contraseña) = contrasena and
       nick = la_variable_con_nick


de esta forma, esta consulta SQL sólo devolverá el registro si coincide el HASH en MD5 de la contraseña que ha introducido el usuario para el inicio de sesión con la que introdujo cuando se dio de alta.


Por supuesto existen más posibilidades, por ejemplo no utilizar la función MD5 de SQL de MySQL y hacerlo mediante código Delphi, así se consigue hacer independiente el código del motor de base de datos, para poder cambiar a otro motor (Oracle, SQL Server) sin problemas. Pues estos otros motores no tienen las mismas funciones SQL.

En Delphi existen componentes gratuitos para obtener el HASH en MD5 o SHA1, un ejemplo lo tienes en esta aplicación:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=229
MensajePublicado:
Mar Jun 26, 2007 9:16 am
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » MySQL Server, MySQL Client, motor de bd gratuito  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A