![]() |
|
|
#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)
| ||