Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.02.2014, 12:56
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию decrypt

Есть кусок типа:
Код:
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  
Старый 04.02.2014, 13:08
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от nixon232
Первый вызов работает, а второй возвращает пустой стринглист (не ошибку). Разве тут есть различия? что не так?
А проверяешь на одном и том же файле? Если да - почему параметр K разный? Если нет - попробуй во втором случае файл из первого примера и с тем же параметром K.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
nixon232 (04.02.2014)
  #3  
Старый 04.02.2014, 13:38
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

Цитата:
Сообщение от poli-smen
А проверяешь на одном и том же файле? Если да - почему параметр K разный? Если нет - попробуй во втором случае файл из первого примера и с тем же параметром K.
Файлы были разные, на одном - работает. Ошибка была (скорее всего) в том, что параметр К во втором случае брался из стринговой константы. Записал К руками - пошло.
Вопрос в догонку - у вас на сайте есть исходних: http://www.delphisources.ru/pages/so...-aes-des.html/
AES encrypt Работает, а декрипт вызывает Invalid buffer size for decryption.
Думал ошибка у автора, но нашел оригинальный AES.pas и все равно не могу декриптить строку. Стрим и файл могу. не критично, но не приятно. Не знаете в чем проблема?
Ответить с цитированием
  #4  
Старый 04.02.2014, 13:47
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от nixon232
Вопрос в догонку - у вас на сайте есть исходних: http://www.delphisources.ru/pages/so...-aes-des.html/
AES encrypt Работает, а декрипт вызывает Invalid buffer size for decryption.
Думал ошибка у автора, но нашел оригинальный AES.pas и все равно не могу декриптить строку. Стрим и файл могу. не критично, но не приятно. Не знаете в чем проблема?
Как вызываешь декриптинг?
Ответить с цитированием
  #5  
Старый 04.02.2014, 13:57
nixon232 nixon232 вне форума
Активный
 
Регистрация: 26.01.2014
Сообщения: 282
Версия Delphi: delphi xe4
Репутация: выкл
По умолчанию

В исходнике он изначально у меня не декриптит.
Код:
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  
Старый 04.02.2014, 14:03
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от nixon232
В исходнике он изначально у меня не декриптит.
.....
Ну и вызов
Код:
s:=EncryptString('123','abc',kb128);
s1:=DecryptString(s,'abc',kb128);
Понятно. Проблема скорее всего в том, что "delphi xe4", т.е. у тебя Delphi юникодная, а пример разрабатывался на старой версии Delphi. Тебе нужно заменить типы "String" и "PChar" на "AnsiString" и "PAnsiChar" соответственно - должно заработать.
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
nixon232 (04.02.2014)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:10.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter