【问题标题】:PHP 7.2 with mcrypt in Windows在 Windows 中使用 mcrypt 的 PHP 7.2
【发布时间】:2018-08-25 16:58:59
【问题描述】:

有一些庞大的遗留系统对 PHP 的 mcrypt 的依赖非常重要和至关重要(包括数据库中的数据存储)。我需要找到一种方法来维护这个库,同时升级到 PHP 7.2(已经运行良好)。

我的本​​地测试环境是 Windows。直播环境在 CentOS 上运行。

我看到的一些答案是解密并将 mcrypt 更改为 openssl(我认为目前这是不可能的,因为要解密的数据很多)。

另一种方法是使用mcrypt-support 下载较低的PHP版本,复制扩展并将其添加到php.ini(我什至不知道文件夹)。

由于安全问题,将 PHP 降级到 5.6 不适合。

在这种情况下可以做什么?

【问题讨论】:

  • 你可以获取mcrypt package from PECL
  • PHP mcrypt 的问题,它是废弃软件,多年未更新,不支持标准 PKCS#7 (née PKCS#5) 填充,仅支持不能的非标准空填充甚至可以与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。不推荐使用的 mcrypt-extension 将在 PHP 7.2 中删除。而是考虑使用defuseRNCryptor,它们提供了一个完整的解决方案,并且目前得到维护和正确。或者使用 OpenSSL,查看答案。
  • 在撰写本文时,PECL 上没有 Windows 7.2 兼容版本的 mcrypt。
  • 我也遇到了同样的情况,这真是一项忙碌的工作。但是当我们计划升级时,我们必须为忙碌的工作做好准备。我们将安全性升级到 libsodium,可以找到实施文档 (paragonie.com/book/pecl-libsodium)。

标签: php windows mcrypt php-7.2


【解决方案1】:

基本上我认为你已经提到了所有的可能性,你别无选择。 不要降级到 PHP 5.6,这种方法没有前途

MCrypt 已从 PHP 中删除,这是您想要升级 PHP 的主要原因之一:安全性。 MCrypt 库不再维护。 因此安装 MCrypt 扩展也是一个坏主意。但这可能是一个临时解决方案(例如遵循这些说明https://serverpilot.io/community/articles/how-to-install-the-php-mcrypt-extension.html)。

唯一好的解决方案是从 mcrypt 迁移到其他东西。 Stackoverflow 上已经有关于这个主题的问题(例如Upgrading my encryption library from Mcrypt to OpenSSL)。或者,您可以使用一些加密库。迁移大量代码/数据可能会很痛苦,但在这种情况下,这是最面向未来的方法。

【讨论】:

  • 我将与基础架构团队联系以安排此解决方案。我知道安装 Mcrypt 扩展是暂时的(我现在正在尝试这样做,在我可以在这里发布反馈之后)。我们使用 Zend 作为框架,我已经看到它具有这样的加密功能。我的主要问题是解密所有数据,保持其完整性并再次加密。
  • @DaniloDavanso Mcrypt 不是专有加密,您可以在 OpenSSL 等其他库中使用所有相同的密码进行加密和解密。除了重写代码,不需要任何转换。
  • 作为对此的快速补充,安装 mcrypt 的链接说明不适用于 Windows。扩展通常可以从 windows.php.net 安装(或者更常见的是 windows.php.net/downloads/pecl/releases ),但目前似乎还没有兼容 7.2 的 mcrypt 扩展版本。
  • 问题是有时甚至不可能迁移,即使您不直接依赖于扩展,但您已经使用或将使用的东西依赖于它。所以我认为“只有好的解决方案”并不是最好的措辞,因为它会使寻求答案的人感到困惑。
【解决方案2】:

请注意,没有关于 mcrypt 选项/代码的代码或信息。

mcrypt 使用的非标准空填充可能是唯一的问题。要使用不支持空填充(它是非标准的)的另一个实现进行解密,只需在没有填充的情况下解密,然后删除空填充。

如果您还必须像mcrypt 一样加密,只需添加空填充并使用无填充进行加密。

真正考虑迁移当前加密或添加一些加密标志(或不)mcrypt 兼容。

【讨论】:

    【解决方案3】:

    尽管有所有警告和建议,如果您仍需要使其正常工作,请尝试以下操作:

    1. 找到您的 PHP 目录。通常它位于 C:\Program 文件\PHP\v7.2
    2. 然后转到这个网址: http://pecl.php.net/package/mcrypt/1.0.3/windows
    3. 下载更符合您要求的软件包。例如,如果 你是 使用 FastCGI 并选择 64 位 Windows 安装 7.2 非线程安全 (NTS) x64
    4. 打开 zip 并将 php_mcrypt.dll 文件复制到 C:\Program Files\PHP\v7.2\ext 目录。
    5. 编辑 php.ini 文件并将其添加到动态扩展 部分: extension=php_mcrypt.dll
    6. 保存 php.ini 并重新启动您的 Web 服务器。

    希望对你有帮助。

    【讨论】:

    • 不适合我按照您解释 php 7.2.3.3 的相同步骤
    猜你喜欢
    • 2019-07-12
    • 2017-07-30
    • 2020-01-03
    • 2018-11-26
    • 2017-03-19
    • 2018-01-27
    • 2015-12-03
    • 2018-08-15
    • 2011-01-31
    相关资源
    最近更新 更多