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

时间:2017-02-16 04:48:31

标签: php mcrypt php-openssl

由于在PHP 7.1中不推荐使用mcrypt,并且我在现有项目中使用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编码?

由于

1 个答案:

答案 0 :(得分:4)

OpenSSL没有Rijndael-256密码;没有相应的东西 - 你必须解密并重新加密所有东西。

但是:

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

以上所有内容都可以这样总结:不要自己动手,使用经过严格审查的图书馆,如defuse/php-encryption

密码学并不简单,只需5行代码即可正常完成。