PHP 7.2 с mcrypt в Windows

Есть несколько огромных устаревших систем, зависимость которых от mcrypt PHP чрезвычайно важна и жизненно важна (включая хранение данных в базе данных). Мне нужно найти способ поддерживать эту библиотеку при обновлении до PHP 7.2 (который уже работал нормально).

Моя локальная тестовая среда - Windows. Живая среда работает на CentOS.

Некоторые из ответов, которые я видел, - это расшифровка и изменение mcrypt на openssl (я думаю, что в настоящий момент это невозможно, поскольку нужно расшифровать много данных).

Другой способ загорается, чтобы загрузить более низкую версию PHP с mcrypt-поддержкой, скопировать расширение и добавить его в php.ini (я даже не знаю папку).

Понижение версии PHP до 5.6 не подходит из-за проблем с безопасностью.

Есть ли какой-то свет в том, что можно сделать в этом сценарии?


person Danilo Davanso    schedule 16.03.2018    source источник
comment
Вы можете получить пакет mcrypt из PECL   -  person CD001    schedule 16.03.2018
comment
Проблема с PHP mcrypt, это заброшенное ПО, не обновлялось годами и не поддерживает стандартное заполнение PKCS # 7 (урожденное PKCS # 5), только нестандартное заполнение нулями, которое нельзя использовать даже с двоичными данными. mcrypt имеет много выдающихся ошибок, относящихся к 2003 году. Расширение mcrypt устарело и будет удалено в PHP 7.2. Вместо этого рассмотрите возможность использования defuse или RNCryptor, они предоставляют полное решение и в настоящее время поддерживаются и корректируются. Или пойти с OpenSSL, см. Ответ.   -  person zaph    schedule 16.03.2018
comment
На момент написания в PECL не было версии mcrypt, совместимой с Windows 7.2.   -  person ChrisC    schedule 13.09.2018
comment
Я столкнулся с таким же сценарием, и это действительно напряженная работа. Но когда мы планируем обновление, мы должны быть готовы к лихорадочным усилиям. Мы обновили нашу систему безопасности до libsodium, и документацию по реализации можно найти (paragonie.com/book/pecl-libsodium).   -  person Hari Prasad Sharma    schedule 20.09.2018


Ответы (3)


В основном я думаю, что вы упомянули все возможности, и у вас нет выбора. Не переходите на PHP 5.6, у этого подхода нет будущего.

MCrypt был удален из PHP по одной из основных причин, по которой вы хотите обновить PHP: безопасность. Библиотека MCrypt больше не поддерживается. Поэтому установка расширения MCrypt - тоже плохая идея. Но это может быть временное решение (следуйте, например, этим инструкциям https://serverpilot.io/community/articles/how-to-install-the-php-mcrypt-extension.html).

Единственное хорошее решение - это перейти с mcrypt на что-то. Уже есть вопросы по этой теме в Stackoverflow (например, Обновление моей библиотеки шифрования с Mcrypt в OpenSSL). В качестве альтернативы вы можете использовать некоторую библиотеку шифрования. Перенос большого количества кода / данных может быть проблемой, но в данном случае это наиболее ориентированный на будущее подход.

person Blackbam    schedule 16.03.2018
comment
Я поговорю с командой инфраструктуры, чтобы организовать это решение. Я знаю, что установка расширения Mcrypt носит временный характер (я пытаюсь сделать это сейчас, после того, как смогу оставить здесь отзыв). Мы используем Zend в качестве фреймворка, и я видел, что у него есть такие функции шифрования. Моя основная проблема - расшифровать все данные, сохранить их целостность и снова зашифровать. - person Danilo Davanso; 16.03.2018
comment
@DaniloDavanso Mcrypt не является проприетарным шифрованием, вы можете использовать все те же шифры для шифрования и дешифрования в других библиотеках, таких как OpenSSL. Никакого преобразования не требуется, кроме переписывания кода. - person Sammitch; 16.03.2018
comment
В качестве быстрого дополнения к этому приведенные инструкции по установке mcrypt не относятся к Windows. Расширения обычно можно установить с windows.php.net (или, чаще, с windows.php.net/ downloads / pecl / Release), но, похоже, пока нет доступной 7.2-совместимой версии расширения mcrypt. - person ChrisC; 12.09.2018
comment
Проблема в том, что иногда миграция невозможна, даже если вы не зависите напрямую от расширения, а то, что вы уже используете или собираетесь использовать, зависит от него. Поэтому я думаю, что только хорошее решение - не лучшая формулировка, потому что это сбивает с толку людей, ищущих ответа. - person Gabor Garami; 14.04.2019

Несмотря на все предупреждения и предложения, если вам все еще нужно заставить его работать, попробуйте следующее:

  1. Найдите свой каталог PHP. Обычно он находится в C: \ Program Files \ PHP \ v7.2.
  2. Затем перейдите по этому URL-адресу: http://pecl.php.net/package/mcrypt/1.0.3/windows
  3. Загрузите пакет, который лучше соответствует вашим требованиям. Например, если вы используете FastCGI и у вас установлена ​​64-разрядная версия Windows, выберите 7.2 Non Thread Safe (NTS) x64
  4. Откройте zip-архив и скопируйте файл php_mcrypt.dll в каталог C: \ Program Files \ PHP \ v7.2 \ ext.
  5. Отредактируйте файл php.ini и добавьте его в раздел динамических расширений: extension = php_mcrypt.dll
  6. Сохраните php.ini и перезапустите свой веб-сервер.

Надеюсь, это поможет.

person Xavier Maurer    schedule 28.05.2020

Обратите внимание, что нет кода или информации о mcrypt опциях / коде.

Наверное, единственная проблема - нестандартное заполнение нулями, используемое mcrypt. Чтобы расшифровать с помощью другой реализации, которая не поддерживает нулевое заполнение (это нестандартно), просто расшифруйте без заполнения, а затем удалите нулевое заполнение.

Если вы также должны зашифровать так же, как mcrypt, просто добавьте нулевое заполнение и зашифруйте без заполнения.

Обязательно подумайте о переносе текущего шифрования или добавлении флага, указывающего, что шифрование (или нет) mcrypt совместимо.

person zaph    schedule 16.03.2018