You are on page 1of 2

Cifrar texto con AES-256

Enviado por admin el Sb, 10/11/2007 - 16:18.

Siguiendo con el tema del cifrado AES-256, del que ya hable aqu y aqu, vamos a ver un par de funciones que nos permitirn cifrar y descifrar texto de una manera rpida y sencilla, mientras mantenemos toda la potencia de este algoritmo de cifrado. Para esto vamos a combinar el cdigo que podemos encontrar aqu, con este otro que publique aqu y que nos permitir representar el texto cifrado con caracteres legibles utilizando la codificacin base64. Lo primero es lo primero, vamos a ver como cifrar el texto:
// Estas dos "units" las puedes encontrar en los enlaces que he puesto 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 // Preparamos la clave, lo ideal es que tenga 32 caracteres 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); // Guardamos el tamao del texto original Size:= Src.Size; Dst.WriteBuffer(Size,Sizeof(Size)); // Ciframos el texto AESEncryptStreamECB(Src,Dst,ExpandedKey); // Lo codificamos a base64 Result:= BinToStr(Dst.Memory,Dst.Size); finally Dst.Free; end; finally Src.Free; end; end;

Y ahora vamos a ver como descifrarlo:


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); // Leemos el tamao del texto 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 pequeo ejemplo de como funciona:

You might also like