Intereting Posts
Динамические перезаписи в файле htaccess Прочитайте файл в «кусках» с помощью PHP Kohana 3.3 Модель не загружается на Linux, но будет работать в Windows Laravel: события Pusher не транслируются из прослушивателя событий eloquent Процент символа в URI CodeIgniter php – date_default_timezone_set не работает, но ini_set 'date.timezone' делает. Зачем? Справочник по ООП для руководства PHP – может кто-то объяснить это Разметка разметки в абстрактном дереве синтаксиса с использованием регулярного выражения Почему спецификация ISO-8601 выглядит повсеместно игнорируемой, когда речь идет о десятичных знаках? TYPO3: Как визуализировать текстовые элементы tt_content в моих собственных расширениях? Проверьте, содержит ли ассоциативный массив значение и извлекает ключ / позицию в массиве Если HTML, CSS и Javascript являются клиентскими, почему они являются компонентами файла PHP? WooCommerce – добавить столбец в таблицу управления продуктом Cat Групповые строки с интервалом 7 дней, начиная с определенной даты Массив реструктуризации на основе отношения родителя / ребенка

Проблемы с OpenSSL на PHP – различное поведение для разных версий

(Этот вопрос был первоначально отправлен на ServerFault – я удалил его там и переместил его сюда.)

У меня есть машина разработки под управлением PHP 5.3.5 и производственная машина с PHP 5.3.8.

Следующий код запускается на машине разработки:

<?php $key = "-----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC0x+2RiQ+LCZNAUcl/Ecf1NrTr lhjOiHaVC+w/y+UJevqVcDstD22OJGwT13B9T47OuQG9BmzcZQYLcShUMhVD/Owu 9+8PcK51EnBd0lym6+z/WixpnqfQonyKiqq5ytmYKUlUv39J8QQUI2geyvY9VpWS wyNcFUs7wPl2zsLCPQIDAQAB -----END PUBLIC KEY-----"; $data = "Hello, world!"; $key1 = openssl_get_publickey($key); print_r ($key1); echo "<p>"; $res = openssl_public_encrypt($data, $encrypted_data, $key1, OPENSSL_PKCS1_PADDING); echo base64_encode($encrypted_data); 

На моей машине разработки этот код выводит ресурс и закодированную строку. Я бы скопировал его здесь, но, конечно, он меняется каждый раз. На производственной машине этот код создает номер ресурса и следующие ошибки PHP:

 PHP Warning: openssl_public_encrypt(): Don't know how to get public key from this private key in C:\xxx\test.php on line 15 PHP Warning: openssl_public_encrypt(): key parameter is not a valid public key in C:\xxx\test.php on line 15 

К сожалению, установка старой версии PHP на производственной машине в настоящий момент не является опцией из-за других приложений, которые работают на ней, что требует минимум 5.3.8.

Помогло бы мне, если бы я обновился до 5.4.x?

Я знаю, что версия OpenSSL на 5.3.5 равна 0.9.8, тогда как версия 5.3.8 равна 1.0.0. Я предполагаю, что там может быть проблема. Есть ли способ обойти это?

Я попытался найти как можно больше с сайта OpenSSL.org, и отладчик ошибок PHP, но я не знаю, что я ищу.

С Уважением,

Филипп

    Согласно этому сообщению , проблема связана с различными версиями OpenSSL Apache и PHP в установке XAMPP / Windows. У меня была аналогичная проблема с openssl_verify. Я решил это, используя ту же версию OpenSSL для Apache и PHP (заменяя библиотеки DLL). Вот ссылка на решение .

    «Я нашел решение проблемы, кажется, что есть два неправильных файла в / apache / bin / в установке по умолчанию 1.7.7, которые необходимо заменить файлами, существующими в / php / (libeay32.ddl и ssleay32.dll )»

    Вы передали неправильный параметр openssl_public_encrypt

    openssl_public_encrypt($data, $encrypted_data, $key1, OPENSSL_PKCS1_PADDING)

    где $key1 – это идентификатор ресурса, который использует $key вместо $key1 . Вы можете использовать

    openssl_public_encrypt($data, $encrypted_data, $key, OPENSSL_PKCS1_PADDING)