PDA

Ver la Versión Completa : Función para encriptar password


dec
30-06-2006, 23:47:11
Esta función se recomienda para encriptar password qeu se alojaran en tu base de datos sirve en kylix y delphi. de la misma manera. debes declarar la sig. funcion antes de la clasula implementacion segun el s.o qeu desees.

Linux:


function crypt(const PWD: string; const SALT: string): Pchar; cdecl; external 'libcrypt.so';


Windows:


function cryptpwd(const PWD: string; const SALT: string): Pchar; cdecl; external 'C:\WINDOWS\SYSTEM\cryptpwd.dll';


Despues esta funcion.


function CryptPasswd(ClearPwd: string): string;
var
SaltContent: array [1..64] of integer;
I,Count: Integer;
Salt: string[2];
Pwd: PChar;
begin
Randomize;
I:=1;
for Count := 46 to 57 do
Begin
SaltContent[I] := Count;
I:=I+1;
End;

for Count := 65 to 90 do
Begin
SaltContent[I] := Count;
I:=I+1;
End;

for Count := 97 to 122 do
Begin
SaltContent[I] := Count;
I:=I+1;
End;

Salt := chr(SaltContent[Random(64)+1])+chr(SaltContent[Random(64)+1]);

Pwd := crypt(ClearPwd,Salt);

Result := Pwd;

end;


Para encriptar seria asi:


procedure TForm1.Button1Click(Sender: TObject);
begin
crypt.Text:=CryptPasswd(Password.Text);
end;


Se recomienda ponerlo en un try en caso de uqe el edit vaya vacio.

La funcion qeu en realidad encripta es la adeclarada la inicio la cual obtiene como parametro un salto y el texto a encriptar; este salto (asi se le conoce) es dado por la segunda funcion la cual lo escoge al azar y si se vuelve a encriptar la misma cadena, como el salto es aleatorio .lo encritara de forma diferente. Para verificar password. se debe de mandar a encriptar pasandole como parametro de salto las primera dos posciones del texto encriptado. y se hace asi.


procedure TForm1.Button2Click(Sender: TObject);
var salt:string;
begin
salt:=copy(crypt.Text,1,2);
decrypt.Text:=Cryptpwd(Password.Text,salt);
if decrypt.Text = crypt.Text then
label1.Caption:='Ambos password encriptados correctamente' // significa que el password se pudo verificar
else
label1.Caption:='No se encriptaron correctamente'; // el password no se verifico.
end;


Necesitas dos librerias en Windows: cryptpwd.dll y cywin1.dll

Espero que les sirva.

Si desean de un ejemplo tan solo escribanme.

isabelb (ARROBA) reco.com.mx