![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
Unconnected |
![]()
Сообщение
#1
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Есть такая замечательная библиотека Chipher, в ней много функций для хеширования и шифрования данных многими алгоритмами. Мне нужен лишь Blowfish. Просто модуля я не нашёл(для Паскаля, кстати, имеется), может, можно как то вытащить из Cipher? Смотрел её исходник - конкретно функции нужной не увидел..
Если точнее - зовётся она Delphi Encryption Compendium Part I-III , если нужно, могу выложить исходники с описанием. Сообщение отредактировано: Unconnected - 18.02.2009 21:32 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Что значит "не увидел"? Есть класс: TCipher_Blowfish = class(TCipher), описанный в файле Cipher.pas... В примерах использования библиотеки показано, как шифровать данные...
|
Unconnected |
![]()
Сообщение
#3
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Взял немного другую библиотеку в итоге, 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 - 19.02.2009 19:43 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата при шифровании и дешифровке маленьких строк получаются кракозябры такого же размера, а при этом же процессе с длинными строками нормально дешифруется лишь вторая половина фразы. Перед расшифровкой строка передаётся по сети. Проблему локализуй для начала... Оставь в покое передачу по сети, пробуй просто шифровать/дешифровать строки. Если все работает, значит будешь пытать передачу по сети, проблема там... Если нет - значит, шифруешь (или дешифруешь) неправильно... |
Unconnected |
![]()
Сообщение
#5
|
![]() mea culpa ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: ![]() ![]() ![]() |
Дешифрует неправильно.. Я не вызываю 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); -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
![]() ![]() |
![]() |
Текстовая версия | 13.07.2025 3:38 |