【问题标题】:PHP7.1 mcrypt alternativePHP7.1 mcrypt 替代方案
【发布时间】:2017-06-04 01:57:48
【问题描述】:

自 PHP 7.1.0 起,Mcrypt 函数已被弃用。

我已弃用的​​字符串编码/解码函数:

$key: secret key
$str: string


$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $str, MCRYPT_MODE_CBC, md5(md5($key))));

$decoded = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($str), MCRYPT_MODE_CBC, md5(md5($key))), "\0");

你能推荐一些替代品吗?

【问题讨论】:

  • 你在这里不走运。您正在使用 Rijndael-256 密码,这是非常不寻常的,并且不受 OpenSSL 支持。您可能的意思是 AES-256,它是带有 256 位密钥的 Rijndael-128。如果您可以选择切换密码,请切换到 Rijndael-128,在这种情况下您可以使用 OpenSSL。
  • 为什么不直接使用 sha-256 (sha version 2)

标签: php encoding decode mcrypt php-7.1


【解决方案1】:
【解决方案2】:

考虑使用defuseRNCryptor,它们提供了完整的解决方案,正在维护并且是正确的。

【讨论】:

    【解决方案3】:

    如上所述,open_ssl 是 mcrypt 的一个很好的替代方案。 我对 open_ssl 的唯一问题是它不能用于大字符串。

    我写了一个脚本(静态类),它克服了这个问题(大字符串被分割成块并在后台分别加密/解密)。

    查看公共要点: https://gist.github.com/petermuller71/33616d55174d9725fc00a663d30194ba

    【讨论】:

      【解决方案4】:

      对于MCRYPT_RIJNDAEL_256,我在此处发布了 PHP7.3 的完整答案:https://stackoverflow.com/a/53937314/243782

      sn-p:

      像这样与phpseclib 库一起工作

      $rijndael = new \phpseclib\Crypt\Rijndael(\phpseclib\Crypt\Rijndael::MODE_ECB);
      $rijndael->setKey(ENCRYPT_KEY);
      $rijndael->setKeyLength(256);
      $rijndael->disablePadding();
      $rijndael->setBlockLength(256);
      
      $decoded = $rijndael->decrypt($term);
      

      【讨论】:

        【解决方案5】:
        echo encrypt_openssl($str, $key);
        
        function encrypt_openssl($msg, $key, $iv = null) {
                $iv_size = openssl_cipher_iv_length('AES-256-CBC');
                if (!$iv) {
                    $iv = openssl_random_pseudo_bytes($iv_size);
                }
                $encryptedMessage = openssl_encrypt($msg, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv);
                return base64_encode($iv . $encryptedMessage);
            }
        

        mcrypt 可能在 PHP 7.1 替代 openssl

        中被移除

        【讨论】:

          猜你喜欢
          • 2018-07-03
          • 2017-04-25
          • 1970-01-01
          • 2012-10-05
          • 2010-09-10
          • 2012-12-05
          • 2013-11-22
          • 2020-11-23
          相关资源
          最近更新 更多