IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Blowfish&Chipher
сообщение
Сообщение #1


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Есть такая замечательная библиотека Chipher, в ней много функций для хеширования и шифрования данных многими алгоритмами. Мне нужен лишь Blowfish. Просто модуля я не нашёл(для Паскаля, кстати, имеется), может, можно как то вытащить из Cipher? Смотрел её исходник - конкретно функции нужной не увидел..

Если точнее - зовётся она Delphi Encryption Compendium Part I-III , если нужно, могу выложить исходники с описанием.

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Что значит "не увидел"? Есть класс: TCipher_Blowfish = class(TCipher), описанный в файле Cipher.pas... В примерах использования библиотеки показано, как шифровать данные...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Взял немного другую библиотеку в итоге, DPCrypt, шифрую и дешифрую как показано в хелпе:

Код
  procedure TForm1.btnEncryptClick(Sender: TObject);
  var
    i: integer;
    Cipher: TDCP_BlowFish;    //TDCP_RC4 здесь заменил на TDCP_BlowFish
    KeyStr: string;
  begin
    KeyStr:= '';
    if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
    begin
      Cipher:= TDCP_blowfish.Create(Self);
      Cipher.InitStr(KeyStr,TDCP_sha1);         // initialize the cipher with a hash of the passphrase
      for i:= 0 to Memo1.Lines.Count-1 do       // encrypt the contents of the memo
        Memo1.Lines[i]:= Cipher.EncryptString(Memo1.Lines[i]);
      Cipher.Burn;
      Cipher.Free;
    end;
  end;
  
  procedure TForm1.btnDecryptClick(Sender: TObject);
  var
    i: integer;
    Cipher: TDCP_BlowFish;    // //TDCP_RC4 здесь заменил на TDCP_BlowFish
    KeyStr: string;
  begin
    KeyStr:= '';
    if InputQuery('Passphrase','Enter passphrase',KeyStr) then  // get the passphrase
    begin
      Cipher:= TDCP_blowfish.Create(Self);
      Cipher.InitStr(KeyStr,TDCP_sha1);         // initialize the cipher with a hash of the passphrase
      for i:= 0 to Memo1.Lines.Count-1 do       // decrypt the contents of the memo
        Memo1.Lines[i]:= Cipher.DecryptString(Memo1.Lines[i]);
      Cipher.Burn;
      Cipher.Free;
    end;
  end;


Проблема в том, что при шифровании и дешифровке маленьких строк получаются кракозябры такого же размера, а при этом же процессе с длинными строками нормально дешифруется лишь вторая половина фразы. Перед расшифровкой строка передаётся по сети.

Сообщение отредактировано: Unconnected -


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
при шифровании и дешифровке маленьких строк получаются кракозябры такого же размера, а при этом же процессе с длинными строками нормально дешифруется лишь вторая половина фразы. Перед расшифровкой строка передаётся по сети.
Проблему локализуй для начала... Оставь в покое передачу по сети, пробуй просто шифровать/дешифровать строки. Если все работает, значит будешь пытать передачу по сети, проблема там... Если нет - значит, шифруешь (или дешифруешь) неправильно...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Дешифрует неправильно.. Я не вызываю cipher.burn(непонятно,зачем это вообще), может, это от этого зависит..

Добавлено через 8 мин.
Решилось, почитал исходник, был виноват Burn.

Код
  key:=edit4.text;
  Cipher.InitStr(key,TDCP_sha1);
  edit2.text:=cipher.encryptstring(edit1.text);
[b]  cipher.Burn;[/b]
  Cipher.InitStr(key,TDCP_sha1);
  edit3.text:=cipher.decryptstring(edit2.text);


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 24.04.2024 6:26
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name