Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Delphi Encryption Compendium VS DCPcrypt  [new]
dalx
Member

Откуда:
Сообщений: 40
пытаюсь сравнить библиотечки шифрования. но не выходит (при, казалось бы, прочих равных) произвести их полную взаимозаменяемость.
Может кто подскажет - что не так делаю? Нюансы инициализации?

делаю так:

var
  pas, txt:String; //некий пароль и некий текст

  hash256_dcp, hash256_dec:String; //хэши для DCP и DEC
  txt_dcp, txt_dec:String; //итоговый текст для DCP и DEC

...

//DCP
with TDCP_sha256.Create(nil) do
  begin
  Init;
  UpdateStr(pas);
  SetLength(hash256_dcp, HashSize shr 3);
  Final(hash256_dcp[1]);
  Burn;
  Free;
  end;

with TDCP_rijndael.Create(nil) do
  begin
  Init(hash256_dcp[1], Length(hash256_dcp), nil);
  SetLength(txt_dcp, Length(txt));
  EncryptCBC(txt[1], txt_dcp[1], Length(txt));
  Free;
  end;

//DEC
with THash_SHA256.Create do
  begin
  Init;
  hash256_dec := CalcBuffer(pas[1], Length(pas), TFormat_Copy);
  Free;
  end;

with TCipher_Rijndael.Create do
  begin
  Init(hash256_dec[1], Length(hash256_dec), EmptyStr, 0);
  SetLength(txt_dec, Length(txt));
  Encode(txt[1], txt_dec[1], Length(txt));
  Free;
  end;


хэши совпадают. итоговый текст - нет (его, понятно, надо привести в что-то типа Base64, но не в этом суть).
что не так?
23 май 17, 21:42    [20505801]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
чччД
Guest
dalx,
тексты не совпадает, а краптографические хеши от них - совпадают? Хи-хи-хи.

Показывай весь код теста. Что с чем сравниваешь.
23 май 17, 21:48    [20505815]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
чччД
Guest
Ну и что за дельфи у тебя еще. Если с юникодными строками, то указывать длину строкового буфера нужно в байтах.
Посмотри еще - в некоторых библиотеках длина ключа/вектора инициализации указывается в битах, в некоторых - в байтах.
23 май 17, 21:54    [20505830]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45907

Для блочных шифров устанавливать размер целевого буфера равным размеру исходной строки -
плохая идея.

Posted via ActualForum NNTP Server 1.5

23 май 17, 22:05    [20505848]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
чччД
Guest
Dimitry Sibiryakov
Для блочных шифров устанавливать размер целевого буфера равным размеру исходной строки -
плохая идея.

Без разницы, конкретно для этих библиотек.
23 май 17, 22:27    [20505888]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
dalx
Member

Откуда:
Сообщений: 40
2 чччД

совпадают хеши паролей. посмотрите код. hash256_dcp, hash256_dec - это хеши от pas. слава богу что они совпадают. а то было бы совсем странно.

уже далее они используются для шифрования текста txt в txt_dcp и в txt_dec. и вот то, что в txt_dcp, txt_dec - не совпадает.

код приведён полостью (сделал отдельную выжимку). нет только инициализации pas и txt. и какого-либо отображения итоговых txt_dcp и txt_dec.

дельфя в примере - 7-ка. там не юникод, потому длины столь халатно.

2 Dimitry Sibiryakov

делалось по аналогии и по примеру демок с этими библиотеками.
23 май 17, 23:48    [20506079]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
dalx
Member

Откуда:
Сообщений: 40
уважаемый all. ни каких идей?

на всякий случай демо проект с библиотеками тут (на яндекс диск из-за размера)
25 май 17, 19:15    [20512703]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
GunSmoker
Member

Откуда:
Сообщений: 3071
dalx, навскидку: ты уверен, что TCipher_Rijndael.Encode использует CBC?
25 май 17, 19:29    [20512729]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
dalx
Member

Откуда:
Сообщений: 40
2 GunSmoker
там есть строка (чуть ранее по коду)
mode := cmCBCx;
смею надеяться, что указав это - кодит по CBC
25 май 17, 19:45    [20512757]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2944
dalx,

with TDCP_rijndael.Create(nil) do
  begin
  Init(hash256_dcp[1], Length(hash256_dcp) * 8, @iv[0]);
  SetLength(txt_dcp, Length(txt));
  EncryptCFB8bit(txt[1], txt_dcp[1], Length(txt));
  Free;
  end;


Потому что:
cmCBCx = Cipher Block Chainung, with CFB8 padding of truncated final block
25 май 17, 21:34    [20512950]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2944
Kazantsev Alexey
CFB8

На счёт этого поторопился...
25 май 17, 21:39    [20512959]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2944
Kazantsev Alexey
На счёт этого поторопился...

В общем, вот. Вместо EncryptCBC() пишем:
  src := Pointer(txt);
  dst := Pointer(txt_dcp);
  for ndx := 1 to Length(txt) div 16 do
   begin
    EncryptCBC(src^, dst^, 16);
    inc(src, 16);
    inc(dst, 16);
   end;

  If Length(txt) mod 16 <> 0 then
   EncryptCFB8bit(src^, dst^, Length(txt) mod 16);
25 май 17, 21:54    [20512983]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 2944
Без цикла:
  If Length(txt) >= 16 Then
   EncryptCBC(txt[1], txt_dcp[1], Length(txt) - Length(txt) mod 16);

  If Length(txt) mod 16 <> 0 then
   EncryptCFB8bit(txt[Length(txt) - Length(txt) mod 16 + 1], txt_dcp[Length(txt) - Length(txt) mod 16 + 1], Length(txt) mod 16);
25 май 17, 22:17    [20513059]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
dalx
Member

Откуда:
Сообщений: 40
2 Kazantsev Alexey

огромное спасибо!

про упущенноеупоротое " * 8" я бы точно не сразу вспомнил. так бы и возился с огрызком ключа/хэша.

а про паддинг - начал догадываться по исходнику разбирая. надо таки документацию читать ;) .

ещё раз - спасибо!
26 май 17, 00:34    [20513272]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
чччД
Guest
чччД
...
Посмотри еще - в некоторых библиотеках длина ключа/вектора инициализации указывается в битах, в некоторых - в байтах.
26 май 17, 00:43    [20513283]     Ответить | Цитировать Сообщить модератору
 Re: Delphi Encryption Compendium VS DCPcrypt  [new]
dalx
Member

Откуда:
Сообщений: 40
2 чччД

да. да. да. каюсь. упустил
26 май 17, 03:44    [20513329]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить