如何在没有 mcrypt 的情况下在 PHP 中解密

How to decrypt in PHP without mcrypt

我已经实现了下一个使用 mcrypt 解密字符串的函数:

function decrypt($encrypted){

    $key = "I5G9VjmnDQ483iDwE9278ST01Rp12Mr7";
    $iv = "W3gtod2XaqHRgdo57968xys2738tl2S6";

    $iv_utf = mb_convert_encoding($iv, 'UTF-8');

    $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($encrypted), MCRYPT_MODE_CBC, $iv_utf);

    return $decrypted;

}

有没有不使用 mcrypt 的替代方法。我不想再依赖这个扩展了。

我在 Github here 上找到了很好的库,但它需要 PHP v5.3 或更高版本。我需要一些适用于 PHP v5.2.4 或更高版本的东西。

MCRYPT_RIJNDAEL_256

抱歉,没有任何 sane 库支持 Rijndael256。但是,它们支持标准 AES。 (如果有人正在阅读这篇文章并且您希望在 2015 年使用安全可靠的密码学,stop using mcrypt

Is there any alternative to this without using mcrypt. I don't want to depends on this extension anymore.

不适用于 Rijndael256。我强烈推荐 this secure PHP encryption library,它使用行业标准 AES 实现经过身份验证的加密,由 PHP 的 OpenSSL 扩展提供。

I found good library on Github here.

对于"good"的给定定义。

  • 此库附带 Rijndael 的纯PHP 实现。编写自己的密码实现从来都不是一个好主意,尤其是在 PHP.
  • 这样的语言中
  • 该代码还自由使用了 substr()strlen(),没有对 mbstring.func_overload.
  • 进行任何健全性检查
  • 它无法提供 authenticated encryption,这在 99.9% 的情况下都是您想要的。

but it requires PHP v5.3 or later. I need something what works with PHP v5.2.4 or later

阅读 this 并请升级到 5.6。 5.2、5.3 和 5.4 分支不再接收安全更新,因此您将遇到比不安全的加密更大的问题。