mdecrypt_generic() : вылетает apache

.R1

Новичок
mdecrypt_generic() : вылетает apache

Конфигурация: winXP w/o SP + apache 1.3.26 + php 4.3.4

Установлен mcrypt со стандартной библиотекой. Берем стандартный пример, и апач молча вылетает при выполнении строки:
PHP:
$decrypted = mdecrypt_generic($td, $encrypted);
Криптование происходит корректно, а вот обратно - никак. Под Linux работает в любых направлениях, но хочется иметь локальную рабочую версию и под Win.

Ранее уже возникал данный вопрос, но путей решения или подсказок я не нашел. Пробовал подключать libmcrypt, прописывая директивы в php.ini - влияния не оказало. Кроме того, использую MCRYPT_RAND вместо MCRYPT_DEV_RANDOM, как указано в мане.

На сколько я понял, читая форум, для нормальной работы mcrypt установлены все необходимые компоненты и они должны быть вполне работоспособными.

В чем же может быть проблема? И на сколько важно указывать директивы mcrypt.algorithms_dir, mcrypt.modes_dir под Win? (Пробовал и системную, и директории libmcrypt)

Заранее благодарен за советы!
 

tony2001

TeaM PHPClub
рабочий пример кода дай, плз.
такой, чтобы я мог его скопировать и выполнить.
 

.R1

Новичок
PHP:
<?php
   /* Open the cipher */
   $td = mcrypt_module_open('rijndael-256', '', 'ofb', '');

   /* Create the IV and determine the keysize length, used MCRYPT_RAND
     * on Windows instead */
   $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); // MCRYPT_DEV_RANDOM
   $ks = mcrypt_enc_get_key_size($td);

   /* Create key */
   $key = substr(md5('very secret key'), 0, $ks);

   /* Intialize encryption */
   mcrypt_generic_init($td, $key, $iv);

   /* Encrypt data */
   $encrypted = mcrypt_generic($td, 'This is very important data');

   /* Terminate encryption handler */
   mcrypt_generic_deinit($td);

   /* Initialize encryption module for decryption */
   mcrypt_generic_init($td, $key, $iv);

   /* Decrypt encrypted string */
   $decrypted = mdecrypt_generic($td, $encrypted);

   /* Terminate decryption handle and close module */
   mcrypt_generic_deinit($td);
   mcrypt_module_close($td);

   /* Show string */
   echo trim($decrypted) . "\n";
?>
 

.R1

Новичок
Я на этом примере и объяснял проблему. Отладка показала, что апач молча вылетает при выполнении строки:

PHP:
$decrypted = mdecrypt_generic($td, $encrypted);
 

.R1

Новичок
Согласен, формулировка "вылетает" не совсем правильная. В error.log ничего не добавляется, но зато выскакивает такое красивое сообщение:


Сам Апач продолжает работать, а на указанном месте выполнение скрипта прекращается.
 

tony2001

TeaM PHPClub
я думаю, стоит обновить РНР (можно и Апач тоже), а после этого попробовать еще раз.
4.3.4 - это версия музейной давности.
 

.R1

Новичок
Хорошо, я попробую обновить PHP и Apache. Хотя мне кажется, что виновата скомпилированная DLL...

-~{}~ 06.01.05 17:50:

Обновление PHP до версии 4.3.10 решило проблему.
 

svetasmirnova

маленький монстрик
offtopic tony2001
>я думаю, стоит обновить РНР (можно и Апач тоже), а после этого попробовать еще раз.
Хе-хе. Начитавшись про проблемы работы PHP и Apache 2.x, попыталась обновить свой Apache 1.3.28 до Apache 1.3.33. Не могу этого сделать! Дистрибутив для Windows они предлагают только инсталлируемый при помощи MSInstaller, который у меня умирает, так ничего и не исталлировав. Жаль всё поубивала, а то бы смешной скриншот прислала :) Придётся компилировать, наверное. Или так жить. C Apache 1.3.28 и Apache 2.x
 

tony2001

TeaM PHPClub
svetasmirnova
хехе =)
могу предложить переставить винду, больше решений я не вижу.
хотя нет, вру: можно еще сервис-пак какой-нить убить.
или потрясти другим бубном.
а в общем, направления два: в гугль и в саппорт от MS.
 

svetasmirnova

маленький монстрик
>могу предложить переставить винду, больше решений я не вижу.

Так всё плохо с Apache 2?

Винду переставить не могу, так конечные пользователи ей пользуется, к сожалению. Извините за тавтологию :)

Впрочем, MSInstaller я уже переставляла: безрезультатно. Но это пока (?) только с Apache такие проблемы.
 

TheBits

Guest
Может стоит сначало удалить старую версию Апача. А затем установить более новую&hellip;
 

.R1

Новичок
Да, 1.3.33 ругнулся, чтобы снесли старье. Потом у меня нормально поставился, тоже через MSInstaller.


Появился вопрос опять про криптование:

Помимо ключа-пароля для криптования генерируется initialization vector (IV). Понятно, что его нужно в каком-то виде хранить. Если мы храним (например) timestamp:
PHP:
$iv = mcrypt_create_iv (8, $timestamp);
На сколько это безопасно?
 

svetasmirnova

маленький монстрик
Originally posted by TheBits
Может стоит сначало удалить старую версию Апача. А затем установить более новую&hellip;
Вообще-то я удаляла 1.3.28, поэтому он ни на что не ругается. Может быть из-за 2.х? Ладно, справлюсь с ними как-нибудь :) А у вас тоже было наподобие
Insstallation corrupted, your system untouched try again later
И кнопка finish?
 

TheBits

Guest
Бр-р-р&hellip; Да у меня была такая проблема летом 2004. Тогда я сначала установил апач 1.х, затем апач 2.х. Тогда в Apache Monitor стало возможным управлять двумя серверами. Я захотел обновить Апач 2.х. Он выдавал такую же ошибку. Решил проблему&nbsp;&mdash;&nbsp;удалил оба и установил только апач 2.х.
Сейчас сижу только под апачем 2.х.
 

svetasmirnova

маленький монстрик
Закрывая оффтопик

Скомпилировался он у меня как в мануале описано без проблем.
Теперь их опять два. Пыталась ручками как сервис прописать (не получается пока :( ) и нашла в реестре остатки 1.3 Может, в них было дело?
 

slach

Новичок
нет дело было в не в них

MS Installer и Install Shield скорее всего ругались

какая ошибка у тебя была на MSI файл ?
 

svetasmirnova

маленький монстрик
slach
>какая ошибка у тебя была на MSI файл ?
Имеется в виду, что вылетает системное окошко с ошибкой? Нет, ничего не вылетало.
Происходило следующее: открывалось окошко инсталлера с неактивированными кнопками Next и Cancel, которое незамедлительно меняло свой облик на окошко инсталлера с активированной кнопкой Finish и потрясающей надписью: "Insstallation corrupted, your system untouched try again later" (или что-то с тем же смыслом: не помню - убила ведь) Всё! Обработка ошибок, понимаешь...

P.S.: Вообще-то это уже не проблема, так как компилируется он без заморочек (что для Windows у большинства программ не так). Единственное, как сервис запускаться не хочет. Но и тут, скорее всего, мне поможет детальное следование ману. (Моя любимая цитата из http://php.net/manual/install.windows.building.html : "Pretty much all of the instructions that follow are of the "set and forget" variety. So sit back and try follow the instructions below as faithfully as you can.") У Apache, наверное, так же :)
 
Сверху