![]() |
|
|
#1
|
|||
|
|||
![]() Есть кусок типа:
Код:
function DecryptFileToStream( srcFN,K: string;var Dest: TStrings;bk:TKeyBit) : Boolean; var fs: TFileStream; ds: TStream ; begin try fs:=TFileStream.Create( srcFN, fmOpenRead ); ds:=TMemoryStream.Create; Result:=DecryptStream( fs, K, ds, bk ); if Result then begin Dest.LoadFromStream( ds ); end; finally fs.Free; ds.Free; end; // try end; Код:
var s : string; ini: TMemIniFile; DecINI: TStrings; begin DecINI:=TStringList.Create; s:=ExtractFilePath( Application.ExeName )+ 'data.pfr'; DecryptFileToStream( s,'11', DecINI,kb256); ini:=TMemIniFile.Create( '' ); ini.SetStrings( DecINI ); Код:
function fn8(s:string): Boolean ; var decr:TStrings; ini:TMemIniFile; reg:TStrings; IK,INa,IM:string; begin try Result:=False; decr:=TStringList.Create; result:=DecryptFileToStream(s,'66',decr,kb256); ini:=TMemIniFile.Create(''); ini.SetStrings(decr); Данные и файл верны. |
#2
|
||||
|
||||
![]() Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nixon232 (04.02.2014)
|
#3
|
|||
|
|||
![]() Цитата:
Вопрос в догонку - у вас на сайте есть исходних: http://www.delphisources.ru/pages/so...-aes-des.html/ AES encrypt Работает, а декрипт вызывает Invalid buffer size for decryption. Думал ошибка у автора, но нашел оригинальный AES.pas и все равно не могу декриптить строку. Стрим и файл могу. не критично, но не приятно. Не знаете в чем проблема? |
#4
|
||||
|
||||
![]() Цитата:
|
#5
|
|||
|
|||
![]() В исходнике он изначально у меня не декриптит.
Код:
function EncryptString(Value: string; Key: string; KeyBit: TKeyBit = kb128): string; var SS, DS: TStringStream; Size: Int64; AESKey128: TAESKey128; AESKey192: TAESKey192; AESKey256: TAESKey256; begin Result := ''; SS := TStringStream.Create(Value); DS := TStringStream.Create(''); try Size := SS.Size; DS.WriteBuffer(Size, SizeOf(Size)); { -- 128 О»ГЬіЧЧоґуі¤¶ИОЄ 16 ёцЧЦ·ы -- } if KeyBit = kb128 then begin FillChar(AESKey128, SizeOf(AESKey128), 0 ); Move(PChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key))); EncryptAESStreamECB(SS, 0, AESKey128, DS); end; { -- 192 О»ГЬіЧЧоґуі¤¶ИОЄ 24 ёцЧЦ·ы -- } if KeyBit = kb192 then begin FillChar(AESKey192, SizeOf(AESKey192), 0 ); Move(PChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key))); EncryptAESStreamECB(SS, 0, AESKey192, DS); end; { -- 256 О»ГЬіЧЧоґуі¤¶ИОЄ 32 ёцЧЦ·ы -- } if KeyBit = kb256 then begin FillChar(AESKey256, SizeOf(AESKey256), 0 ); Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key))); EncryptAESStreamECB(SS, 0, AESKey256, DS); end; Result := StrToHex(DS.DataString); finally SS.Free; DS.Free; end; end; { -- ЧЦ·ыґ®ЅвГЬєЇКэ Д¬ИП°ґХХ 128 О»ГЬіЧЅвГЬ -- } function DecryptString(Value: string; Key: string; KeyBit: TKeyBit = kb128): string; var SS, DS: TStringStream; Size: Int64; AESKey128: TAESKey128; AESKey192: TAESKey192; AESKey256: TAESKey256; begin Result := ''; SS := TStringStream.Create(HexToStr(Value)); DS := TStringStream.Create(''); try Size := SS.Size; SS.ReadBuffer(Size, SizeOf(Size)); { -- 128 О»ГЬіЧЧоґуі¤¶ИОЄ 16 ёцЧЦ·ы -- } if KeyBit = kb128 then begin FillChar(AESKey128, SizeOf(AESKey128), 0 ); Move(PChar(Key)^, AESKey128, Min(SizeOf(AESKey128), Length(Key))); DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey128, DS); end; { -- 192 О»ГЬіЧЧоґуі¤¶ИОЄ 24 ёцЧЦ·ы -- } if KeyBit = kb192 then begin FillChar(AESKey192, SizeOf(AESKey192), 0 ); Move(PChar(Key)^, AESKey192, Min(SizeOf(AESKey192), Length(Key))); DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey192, DS); end; { -- 256 О»ГЬіЧЧоґуі¤¶ИОЄ 32 ёцЧЦ·ы -- } if KeyBit = kb256 then begin FillChar(AESKey256, SizeOf(AESKey256), 0 ); Move(PChar(Key)^, AESKey256, Min(SizeOf(AESKey256), Length(Key))); DecryptAESStreamECB(SS, SS.Size - SS.Position, AESKey256, DS); end; Result := DS.DataString; finally SS.Free; DS.Free; end; end; Код:
s:=EncryptString('123','abc',kb128); s1:=DecryptString(s,'abc',kb128); |
#6
|
||||
|
||||
![]() Цитата:
|
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
nixon232 (04.02.2014)
|