分享

Delphi2009,2010能使用的AES单元

 quasiceo 2013-01-11

Delphi2009,2010能使用的AES单元

606人阅读 评论(2) 收藏 举报

从DELPHI2009开始,所有的string类型都被编译器当成了widestring了.早期版本的各个模块单元不得不重写.前些天一直在忙着处理这个AES单元,在网上搜索到了几个所谓的解决方案,但实际上都是在乱来,结果虽然是正确的,但是比结果更为重要的是修改的思路吧.这个单元在D2009无法使用,是因为输出结果时使用的是widestring导致尾部有部分字符被截断. 网上的解决办法居然是去修改原来封装得接近完美的单元...天...其实这问题很容易解决,只要重写一下他的输出流...

 

 

共有两个单元,AES,和ELAES,以下是AES单元的主要内容.ELAES单元不需要改动.不多说了,需要的自己看吧.

 

type
  TMyStringStream=class(TStringStream)
    function GetHexData:string;
  end;

implementation

{ TMyStringStream }
function TMyStringStream.GetHexData: string;
var
i:integer;
begin
for I := 0 to (size - 1) do //div 2 do
 Result := Result + IntToHex(Bytes[I], 2);
end;


function AES_EncryptString(Value,Key: String): string;
var
  SS, DS: TMyStringStream;
  Size: Integer;
  AESKey: TAESKey128;
  Key: AnsiString;//string;
  AnsiValue:AnsiString;
begin
  AnsiValue:=Value;

  Result := '';
  SS := TMyStringStream.Create(AnsiValue);
  DS := TMyStringStream.Create('');
  try
    Size := SS.Size;
    DS.WriteBuffer(Size, SizeOf(Size));
    FillChar(AESKey, SizeOf(AESKey), 0);
    Move(PAnsiChar(Key)^, AESKey, Min(SizeOf(AESKey), Length(Key)));
    EncryptAESStreamECB(SS, 0, AESKey, DS);
    Result :=DS.GetHexData;// StrToHex(DS.DataString);
  finally
    SS.Free;
    DS.Free;
  end;
end;

function AES_DecryptString(Value,Key: string): string;
var
  SS: TMyStringStream;
  DS: TMyStringStream;
  Size: Integer;
  AESKey: TAESKey128;
  Key: AnsiString;
begin
  Result := '';
  SS := TMyStringStream.Create(HexToAnsi(Value));//Trim(HexToStr(Value)));
  DS := TMyStringStream.Create('');
  try
    Size := SS.Size;
    SS.ReadBuffer(Size, SizeOf(Size)); //起始信息
    FillChar(AESKey, SizeOf(AESKey), 0);
    Move(PAnsiChar(Key)^, AESKey, Min(SizeOf(AESKey), Length(Key)));
    DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey, DS);
    //DecryptAESStreamECB(SS, SS.Size, AESKey, DS);
    //Result :=DS.GetStringData;//
    Result := DS.DataString;
  finally
    SS.Free;
    DS.Free;
  end;
end;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多