Otro ejemplito:
Código Delphi
[-]uses AES, Base64;
function Cifrar(Str,Clave: String): String;
var
Src: TStringStream;
Dst: TMemoryStream;
Size: Integer;
Key: TAESKey;
ExpandedKey: TAESExpandedKey;
begin
Result:= EmptyStr;
Src:= TStringStream.Create(Str);
try
Dst:= TMemoryStream.Create;
try
FillChar(Key,Sizeof(Key),#0);
if Length(Clave) > Sizeof(Key) then
move(PChar(Clave)^,Key,Sizeof(key))
else
move(PChar(Clave)^,Key,Length(Clave));
AEsExpandKey(ExpandedKey,Key);
Size:= Src.Size;
Dst.WriteBuffer(Size,Sizeof(Size));
AESEncryptStreamECB(Src,Dst,ExpandedKey);
Result:= BinToStr(Dst.Memory,Dst.Size);
finally
Dst.Free;
end;
finally
Src.Free;
end;
end;
function Descifrar(Str,Clave: String): String;
var
Src: TMemoryStream;
Dst: TStringStream;
Size: Integer;
Key: TAESKey;
ExpandedKey: TAESExpandedKey;
begin
Result:= EmptyStr;
Src:= TMemoryStream.Create;
try
Dst:= TStringStream.Create(Str);
try
StrToStream(Str,Src);
Src.Position:= 0;
FillChar(Key,Sizeof(Key),#0);
if Length(Clave) > Sizeof(Key) then
move(PChar(Clave)^,Key,Sizeof(key))
else
move(PChar(Clave)^,Key,Length(Clave));
AESExpandKey(ExpandedKey,Key);
Src.ReadBuffer(Size,Sizeof(Size));
AESDecryptStreamECB(Src,Dst,ExpandedKey);
Dst.Size:= Size;
Result:= Dst.DataString;
finally
Dst.Free;
end;
finally
Src.Free;
end;
end;
Para terminar, un pequeño ejemplo de cómo funciona:
* Ciframos el texto "Hola mundo": Str := Cifrar("Hola mundo",'1234567890');
* Ahora la variable Str contiene el texto: CgAAADpn2TqC3VGqJmIQdPzgAaA=
* Desciframos el texto anterior: Str := Descifrar("CgAAADpn2TqC3VGqJmIQdPzgAaA=",'1234567890');
* Ahora la variable Str vuelve a contener el texto: "Hola mundo"
--------------------------------------------------
Otro más:
http://delphi.jmrds.com/node/96
Como ves, el amigo
Seoane tiene bastantes recursos sobre el tema.