![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| Ky6uk |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 22.6.2007 Репутация: нет Всего: нет |
Имеем пакет, считанный из сокета. Первые два байта пакета не шифруются и хранят в себе размер пакета. Почти всегда длина пакета равна 186 байт (первые два байта: BA 00). Остальные 184 байта шифруются по алгоритму blowfish блоками по 8 байт. То есть получается как раз 23 блока. Ключ шифрования так же известен: "6b 60 cb 5b 82 ce 90 b1 cc 2b 6c 55 6c 6c 6c 6c" (видимо это так же набор из 16 байт).
Необходимо дешифровать пакет, используя средства Perl. Использование библиотеки Crypt::Blowfish не приводит к желаемому результату. Проверялось на рабочем алгоритме, написанном на С++. Результат должен получиться следующим: Имеем пакет:
После дешифрования должно получиться:
Подскажите, как можно реализовать данную затею на Perl. |
||||
|
|||||
| Ky6uk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 22.6.2007 Репутация: нет Всего: нет |
Собственно сам код:
Это сообщение отредактировал(а) Ky6uk - 7.7.2008, 19:39 |
|||
|
||||
| n4n0bit |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 19.6.2008 Репутация: нет Всего: 1 |
Зашифруй одно и тож слово модулем Crypt::Blowfish и средствами с++ а потом сравни (plain text не используя сеть ) если все верно, значит при чтениии из сокета где та может один символ или лишний или не хватает, например '\n' ( в perl реализации ) или еще что.
Это сообщение отредактировал(а) n4n0bit - 7.7.2008, 17:43 |
|||
|
||||
| Ky6uk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 22.6.2007 Репутация: нет Всего: нет |
Дело в том, что из сокета читается верное количество байт. 186 как в случае с С++ и Perl. Выше в коде я уже оперирую со статичным пакетом, без использования сети (получен средствами С++). Но все равно что-то где-то не так. Может быть реализации blowfish в openssl для C++ отличаются от реализации Crypt::Blowfish на Perl?
|
|||
|
||||
| Ky6uk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 22.6.2007 Репутация: нет Всего: нет |
Продолжительные ковыряния привели еще к одной мысли, что в Crypt::Blowfish и в простейшей OpenSSL-функции void BF_decrypt(BF_LONG *data,const BF_KEY *key); используются разные алгоритмы. (в OpenSSL есть еще bf-cbc, bf-cfb, bf-ecb и bf-ofb помимо обычного bf)
Пытался шифровать и дешифровать обычный текст, результаты с программой на С++ так же несовпадают с результатами на Perl. Причем на C++ результат верный (нужный мне). |
|||
|
||||
| Ky6uk |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 42 Регистрация: 22.6.2007 Репутация: нет Всего: нет |
Не без добрых людей проблема решена inline модулем:
Но вопрос о различном результате при использовании "родных" модулей шифрования blowfish остается открытым. |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |