什么是最安全的 mcrypt_encrypt 算法?

Posted

技术标签:

【中文标题】什么是最安全的 mcrypt_encrypt 算法?【英文标题】:What is the most secure mcrpyt_encrypt algorithm? 【发布时间】:2019-07-04 14:41:56 【问题描述】:

我正在尝试提出一种安全算法来加密和解密我正在处理的项目中的特定字符串。我正在使用 mcrypt_encrypt 和 MCRYPT_RIJNDAEL_256 分组密码变体。

我测试了很多,发现这个看起来很安全。

我正在将加密和解密转换为函数,以便在我的项目未来的多个实例中调用它们。到目前为止,这就是我想出的。我的问题是,是否有任何方法可以使其更安全、更难解密,或者是否有任何已知更好的新公式/方法。

function encrypt($privatekey, $stringe)
 
     $var = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $privatekey, $stringe, 
 MCRYPT_MODE_CBC, $privatekey);
     return base64_encode($var);
 
function decrypt($privatekey, $stringd)

    $stringd = str_replace("~", "+", $stringd);
    $var = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $privatekey, 
base64_decode($stringd), MCRYPT_MODE_CBC, $privatekey);
    $var = rtrim($var, "\0\4");
    return $var;

【问题讨论】:

mcrypt 多年未使用。它已被弃用,并且不支持更多现代填充方案、分组密码模式等。另请注意,您的代码不会验证密文,也不能正确处理 IV。请参阅this repository 中的 php 示例以查看现代且安全的示例。 @LukeJoshuaPark 谢谢你的回复,我感觉我走错了路。感谢您回复我,我将通读您的参考资料。 【参考方案1】:

我测试了很多,发现这个看起来很安全。

您具体进行了哪些测试?

Rijndael256 是 Rijndael 的 256 位块变体(128 位块大小变体称为 AES)。但是,当在纯软件中实现时(如实现 mcrypt),it's vulnerable to cache-timing attacks。

什么是最安全的 mcrpyt_encrypt 算法?

Mcrypt 的实现不安全。这就是它在 PHP 7.1 中被弃用并在 PHP 7.2 中被删除的原因。

请参阅 this answer 以获取由 libsodium 支持的安全使用示例代码。对于 PHP 7.1 及以下版本,您需要从 PECL 安装 Sodium 扩展或安装 sodium_compat。

【讨论】:

以上是关于什么是最安全的 mcrypt_encrypt 算法?的主要内容,如果未能解决你的问题,请参考以下文章

CryptoJS 中 CFB 模式中的 mcrypt_encrypt 函数

PHP 7.2中mcrypt_encrypt的精确替代

致命错误:调用未定义的函数 mcrypt_encrypt [重复]

PHP 7.2 中 mcrypt_encrypt 的完全替代品

mcrypt_encrypt 到 openssl_encrypt 和 OPENSSL_ZERO_PADDING 问题

mcrypt_encrypt 不同的结果在 php 和 ios