Hola como dice el titulo alguien a utilizado las nuevas librerías de cifrado AES de el Ing Seaone en delphi XE porque no he podido cifrar un texto de mas de 16 caracteres porque el State es de 16 bits? alguien sabe como aumentar su capacidad o que se dinámico o no se puede? despues quize usar los stream pero me quede en el Create y no entendí bien como leer y escribir. Disculpen mi ignorancia pero quisiera entender como se usan ya que se que son muy conocidas por aquí.
http://code.google.com/p/secrypt/
Código Delphi
[-]
uses SeAES256, SeBase64, SeSHA256, SeStreams;
procedure TForm1.Button1Click(Sender: TObject)
var
Key: AnsiString;
PlainText: AnsiString;
AESKey: TAESKey;
ExpandedKey: TAESExpandedKey;
State: TAESState;
begin
Key:= '12345678901234567890123456789012';
PlainText:=
'No puedo meter mas de 16 caracteres';
AESCopyKey(AESKey,PAnsiChar(Key));
AESExpandKey(ExpandedKey,AESKey);
move(PAnsiChar(PlainText)^,State,Sizeof(State));
AESEncrypt(State,ExpandedKey);
memo1.Lines.Add(Copy(PAnsiChar(@State),1,Sizeof(State)));
AESDecrypt(State,ExpandedKey);
memo2.Lines.Add( 'Bloque = ' + Copy(PAnsiChar(@State),1,Sizeof(State)));
end;
Código Delphi
[-]function CalcularClave(Clave: AnsiString): TAESExpandedKey;
var
Key: TAESKey;
begin
TSHA256HASH(Key):= CalcSHA256(Clave);
AEsExpandKey(Result,Key);
end;
function Cifrar(Str: AnsiString; Clave: TAESExpandedKey): String;
var
Dst: TStringStream;
AStream: TAESEnc;
BStream: TBase64Enc;
begin
Dst:= TStringStream.Create(EmptyStr);
try
BStream:= TBase64Enc.Create(Dst);
AStream:= TAESEnc.Create(BStream,Clave);
try
AStream.Write(PAnsiChar(Str)^,Length(Str));
finally
AStream.Free;
BStream.Free;
end;
Result:= Dst.DataString;
finally
Dst.Free;
end;
end;
function Descifrar(Str: AnsiString; Clave: TAESExpandedKey): String;
var
Dst: TStringStream;
AStream: TAESDec;
BStream: TBase64Dec;
begin
Dst:= TStringStream.Create(EmptyStr);
try
AStream:= TAESDec.Create(Dst,Clave);
BStream:= TBase64Dec.Create(AStream);
try
BStream.Write(PAnsiChar(Str)^,Length(Str));
finally
BStream.Free;
AStream.Free;
end;
Result:= Dst.DataString;
finally
Dst.Free;
end;
end;
ahi estan los ejemplos pero que no he podido resolverlos, se que la mejor persona es Seaone para que me responda pero es mejor por foro para que quede archivado que no?. Gracias manes