Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Encriptar contraseña con funciones Mysql (https://www.clubdelphi.com/foros/showthread.php?t=64347)

laelen 27-03-2009 18:50:03

Encriptar contraseña con funciones Mysql
 
Hola a todos... bueno la verdad este es un foro al que paso muy seguido y con el que he resuelto cantidad de problemas gracias a hilos existentes, pero creo que ha llegado la hora de postear :D...

Recien comienzo con delphi la verdad, tengo como 2 meses usandolo, sorry si mi pregunta les resulta demasiado sencilla... El asunto es el siguiente...

Estoy tratando de encriptar contraseñas a la hora de mandarlas a la base de datos (mysql)... La forma en en que lo hago es con MD5 , a la hora de madar los valores pero el detalle es que a la hora de recuperar el valor no se como hacer la comparacion con el valor que han introduciodo el en edit, ya que este esta desencriptado y cuando recupero el valor mediante el select obviamente me lo manda encriptado... hay alguna forma de hacer la comparacion o de convertir el valor del edit a su respectivo MD5 para hacer la comparacion?

No se si me he explicado bien pero desde ya agradezco sus comentarios y cualquier ayuda...desde ya gracias...

Chris 27-03-2009 18:56:45

Código PHP:

$contrasena_encriptada MD5("contraseña"); 

Saludos.

laelen 27-03-2009 19:06:12

Hola D&W ..

bueno gracias por la taan pronta respuesta...
con respecto a tu respuesta estoy segura que asi es la manera correcta de hacerlo en php... la vdd no se si me equivoque de sitio pero me gustaria saber como hacerlo con delphi :confused:...

mira el codigo que tengo es el siguiente...

Código Delphi [-]
procedure TfrmAcceso.Validacion;
begin
  with frmPrincipal.myqry do
  begin
    Database:= frmPrincipal.mydb;
    Close;
    SQL.Clear;
    SQL.Text:= 'SELECT Usuario,Password FROM Usuarios WHERE Usuario =:Usuario AND Password = Md5(:Password)';
    ParamByName('Usuario').AsString:= ledtUsuario.Text;
    ParamByName('Password').AsString:= ledtPassword.Text;
    Open;
    if not isempty then
    begin
      usuario:= FieldByName('Usuario').AsString;
      Password:= FieldByName('Password').AsString;
    end
    else
    begin
      usuario:='';
      Password:= '';
    end;
    Close;
  end;
  if (usuario<>'') and (password<>'') then
  begin
//comparacion sencible mayusculas y minusculas
    if compareStr(ledtUsuario.Text,Usuario)<>0 then
    begin
      Application.MessageBox('El usuario y contraseña son invalidos.'+#13+'Intentelo de nuevo', 'Advertencia', + MB_ICONWARNING + MB_OK);
      ledtPassword.SetFocus;
    end
    else
    begin
//comparacion sencible mayusculas y minusculas
      if compareStr(ledtpassword,Password)<>0 then
      begin
        Application.MessageBox('El usuario y contraseña son invalidos.'+#13+'Intentelo de nuevo', 'Advertencia', + MB_ICONWARNING + MB_OK);
        ledtPassword.SetFocus;
      end
      Else
      begin
        activarMenu(true);
        Close;
      end;
    end;
  end
  Else
  begin
    Application.MessageBox('El usuario y contraseña son invalidos.'+#13+'Intentelo de nuevo', 'Advertencia', MB_ICONWARNING + MB_OK );
    ledtUsuario.SetFocus;
  end;
end;

Obviamente, en la parte de comparacion del password con el edit ledpassword me truena ya que este tiene la contraseña desencriptada y el otro encriptada...

gracias

Chris 27-03-2009 19:16:35

Disculpame, pero es que solo leí el post superficialmente :o.

Según entiendo, lo que andas buscando es obtener el MD5 de una "contraseña" en Delphi. Lamentablemente, Delphi no incluye funciones para obtener este tipo de información. Sin embargo, ya muchos han implementado el algoritmo para Delphi. Te dejo un enlace hacía la implementación hecha por un viejo amigo, seoane. Puedes descargar el código aquí.

Por otro lado, te recomiendo que leas este post que escribí hace casi un año.

Saludos.

roman 27-03-2009 20:29:49

laelen:

Creo que te estás liando demasiado y en realidad ya tienes resuelto el problema. Tu consulta:

Código SQL [-]
select usuario, password from usuarios
where usuario = :usuario and password = md5(:password)

es más que suficiente; estás comparando el password (almacenando con md5) con el md5 del password que se escribe en el edit. Así que ya no tienes que hacer más nada; no entiendo porqué quieres obtener el valor de los campos usuario y password, no los necesitas.

Tu código quedaría más o menos así:

Código Delphi [-]
procedure TfrmAcceso.Validacion;
begin
  with frmPrincipal.myqry do
  begin
    Database:= frmPrincipal.mydb;
    Close;
    SQL.Clear;
    SQL.Text:= 'SELECT Usuario,Password FROM Usuarios WHERE Usuario =:Usuario AND Password = Md5(:Password)';
    ParamByName('Usuario').AsString:= ledtUsuario.Text;
    ParamByName('Password').AsString:= ledtPassword.Text;
    Open;

    if isempty then
    begin
      Application.MessageBox('El usuario y contraseña son invalidos.'+#13+'Intentelo de nuevo', 'Advertencia', + MB_ICONWARNING + MB_OK);
      ledtPassword.SetFocus;
    end
    else
    begin
      Application.MessageBox('El usuario y contraseña son invalidos.'+#13+'Intentelo de nuevo', 'Advertencia', MB_ICONWARNING + MB_OK );
      ledtUsuario.SetFocus;
    end;
end;

Y ya, el resto es innecesario.

// Saludos

laelen 28-03-2009 01:06:53

YA solucione mi problema, gracias por sus respuestas...

D&W grax por el post jeje tienes mucha razon en lo de las comparaciones, aunque ren realidad al revisar el codigo me di cuenta que la comparacion era innecesaria en el campo password...

En cuanto a la encriptacion...

Grax Roman la verdad si tenia codigo innecesario, lo modifique a como tu me comentaste, solo le kambie las sentencias del Else y ya me jala perfecto...

el codigo quedo asi:

Código Delphi [-]
procedure TfrmAcceso.Validacion;

begin
  with frmPrincipal.myqry do
  begin
    Database:= frmPrincipal.mydb;
    Close;
    SQL.Clear;
    SQL.Text:= 'SELECT Usuario, Password FROM Usuarios WHERE Usuario =:Usuario AND Password = MD5(:Password)';
    ParamByName('Usuario').AsString:= ledtUsuario.Text;
    ParamByName('Password').AsString:= ledtPassword.Text;
    Open;
    if isempty then
    begin
      Application.MessageBox('El usuario y contraseña son invalidos.'+#13+'Intentelo de nuevo', 'Advertencia', + MB_ICONWARNING + MB_OK);
      ledtPassword.SetFocus;
    end
    Else
    begin
      Usuario:= fieldByname('Usuario').AsString;
      activarMenu(true);
      frmAcceso.Close;
    end;
    Close;
  end;
end;

En cuanto al usuario, ese lo jalo para poner el nombre del Usuario activo en la barra de titulo de la pagina principal...(esto lo hago en el procedimiento activarMenu)...

En fin....Muchas gracias por su ayuda

roman 28-03-2009 01:22:13

Cita:

Empezado por laelen (Mensaje 343030)
solo le kambie las sentencias del Else y ya me jala perfecto...

Je, je. Es cierto, me falló el copia-y-pega :D

// Saludos


La franja horaria es GMT +2. Ahora son las 16:31:28.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi