AES加密演算法如何改在Delphi2010編譯 |
尚未結案
|
mcho
初階會員 發表:57 回覆:106 積分:42 註冊:2002-11-11 發送簡訊給我 |
請問版主及大大:
小弟原來在Delph7使用”AES加密演算法”但在Delphi2010無法使用,原始碼如下:請指點!謝謝! Function GetPassWord(const S1,pa1:String):String; function HexToString(const S: string): string; var i: integer; begin Result := ''; // Go throught every single hexadecimal characters, and convert // them to ASCII characters... for i := 1 to Length( S ) do begin // Only process chunk of 2 digit Hexadecimal... if ((i mod 2) = 1) then Result := Result Chr( StrToInt( '0x' Copy( S, i, 2 ))); end; end; var Source: TStringStream; Dest: TStringStream; Size: integer; Key: TAESKey128; EncryptedText: TStrings; S: string; begin if length(S1) < 20 then begin Result := ''; exit; end; // Convert hexadecimal to a strings before decrypting... //S1:= DMMIS.DeptUser.fieldbyname('PASSWORD1').Value; Source := TStringStream.Create( HexToString(S1)); Dest := TStringStream.Create( '' ); try // Start decryption... Size := Source.Size; //Start := GetTickCount; Source.ReadBuffer(Size, SizeOf(Size)); // Prepare key... FillChar(Key, SizeOf(Key), 0); Move(PChar(Pa1)^, Key, Min(SizeOf(Key), Length(Pa1))); // Decrypt now... DecryptAESStreamECB(Source, Source.Size - Source.Position, Key, Dest); //Stop := GetTickCount; //Label8.Caption := IntToStr(Stop - Start) ' ms'; //Refresh; // Display unencrypted text... //if Sender <> nil then Result := Dest.DataString //else // Edit3.text := Dest.DataString; finally Source.Free; Dest.Free; end; end; function Trans2PassWord(const Pa,pa1:String):String; function StringToHex(const S: string): string; var i: integer; begin Result := ''; // Go throught every single characters, and convert them // to hexadecimal... for i := 1 to Length( S ) do Result := Result IntToHex( Ord( S[i] ), 2 ); end; //AES加密演算法 var Source: TStringStream; Dest: TStringStream; Size: integer; Key: TAESKey128; KeyWord:string; begin //Refresh; Source := TStringStream.Create( pa ); Dest := TStringStream.Create( '' ); try // Save data to memory stream... Size := Source.Size; Dest.WriteBuffer( Size, SizeOf(Size) ); // Prepare key... FillChar( Key, SizeOf(Key), 0 ); Move( PChar(Pa1)^, Key, Min( SizeOf( Key ), Length( Pa1 ))); EncryptAESStreamECB( Source, 0, Key, Dest ); //Refresh; Result := StringToHex( Dest.DataString ); finally Source.Free; Dest.Free; end; end;
------
何明昌 |
guimeili2009
一般會員 發表:0 回覆:1 積分:0 註冊:2009-03-25 發送簡訊給我 |
|
mcho
初階會員 發表:57 回覆:106 積分:42 註冊:2002-11-11 發送簡訊給我 |
|
Victor4022
中階會員 發表:0 回覆:76 積分:90 註冊:2011-02-20 發送簡訊給我 |
例如底下的 Move 函式,
[code delphi] Move(PChar(Pa1)^, Key, Min(SizeOf(Key), Length(Pa1))); [/code] Delphi 7 內的PChar = PAnsiChar Delphi 2009 (或更高) 的 PChar = PWideChar 甚至 TAESKey128 內的結構如果有 Char 型別,可能要調整成 AnsiChar 您可以參考:http://www.google.com.tw/url?sa=t&source=web&cd=4&ved=0CDIQFjAD&url=http://www.sinter.com.tw/downloadpage/200810Delphi2009_short.ppt&ei=x1aoTZnsHIqqvQPCn52ICg&usg=AFQjCNH_jWe18GCEAfC237JmsJaZ3oRcBw ===================引 用 mcho 文 章=================== 請問類型改那一種類型,請舉例!謝謝! |
ffx132
一般會員 發表:0 回覆:1 積分:0 註冊:2011-05-10 發送簡訊給我 |
|
mcho_60461
一般會員 發表:16 回覆:23 積分:7 註冊:2006-07-31 發送簡訊給我 |
|
mcho_60461
一般會員 發表:16 回覆:23 積分:7 註冊:2006-07-31 發送簡訊給我 |
我編成dll 使用時有錯誤的訊息是Invalid pointer operation:如下
unit GetPassWordUt; interface uses SysUtils,Classes,ElAES, Math; Function GetPassWordDll(const S1,pa1:String):AnsiString; export; implementation Function GetPassWordDll(const S1,pa1:String):AnsiString; function HexToString(const S: string): string; var i: integer; begin Result := ''; // Go throught every single hexadecimal characters, and convert // them to ASCII characters... for i := 1 to Length( S ) do begin // Only process chunk of 2 digit Hexadecimal... if ((i mod 2) = 1) then Result := Result Chr( StrToInt( '0x' Copy( S, i, 2 ))); end; end; var Source: TStringStream; Dest: TStringStream; Size: integer; Key: TAESKey128; EncryptedText: TStrings; S: string; begin if length(S1) < 20 then begin Result := ''; exit; end; Source := TStringStream.Create( HexToString(S1)); Dest := TStringStream.Create( '' ); try // Start decryption... Size := Source.Size; //Start := GetTickCount; Source.ReadBuffer(Size, SizeOf(Size)); // Prepare key... FillChar(Key, SizeOf(Key), 0); Move(PChar(Pa1)^, Key, Min(SizeOf(Key), Length(Pa1))); // Decrypt now... DecryptAESStreamECB(Source, Source.Size - Source.Position, Key, Dest); Result := Dest.DataString finally Source.Free; Dest.Free; end; end; end. ===================引 用 mcho 文 章=================== 請問類型改那一種類型,請舉例!謝謝!
------
mcho |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |