PDA

Ver la Versión Completa : Encriptar contraseña con funciones Mysql


laelen
27-03-2009, 18:50:03
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
$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...

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í (http://www.clubdelphi.com/trucos/index.php?id=402).

Por otro lado, te recomiendo que leas este post (http://www.clubdelphi.com/foros/showthread.php?t=56757) 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:


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í:


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:

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
solo le kambie las sentencias del Else y ya me jala perfecto...

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

// Saludos