如何使用 OpenSSL 解密之前使用 mcrypt 加密的字符串?

How to decrypt a string with OpenSSL which was previously encrypted with mcrypt?

由于 mcrypt 在 PHP 7.1 中被弃用并且我在现有项目中有大量数据 encrypted/decrypted 使用 mcrypt,如何将我的 PHP 代码从 mcrypt 迁移到 OpenSSL?我有以下代码要加密:

$encoded = base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, 'salt', 'source string', MCRYPT_MODE_ECB));

解密密码为:

$source = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, 'salt', base64_decode('encoded string'), MCRYPT_MODE_ECB);

我应该在上面的示例中使用哪些 openssl_ 函数才能在不进行编码数据转换的情况下获得相同的结果?

或者唯一的方法是 运行 一个脚本,该脚本将使用 mcrypt 解密我存储的所有加密数据并使用 openssl 进行编码?

谢谢

OpenSSL 没有 Rijndael-256 密码;没有等价物 - 你必须解密并 re-encrypt 一切。

还有:

  • 您缺少填充和身份验证。
  • 不要使用 ECB 模式。
  • "salt" 不是正确的加密密钥,也不是任何常规字符串。使用 random_bytes() 生成您的密钥,使用适合所选算法的密钥长度

以上所有内容都可以这样总结:不要自己动手,使用 well-vetted 库,例如 defuse/php-encryption

密码学不是简单的事情,仅用 5 行代码是无法正确完成的。