【问题标题】:DES encrypt but Fortify report Weak Encryption on PHP 5.5.22DES 加密但 Fortify 报告 PHP 5.5.22 上的弱加密
【发布时间】:2016-07-14 03:00:29
【问题描述】:

我想进行 DES 加密和解密,但 Fortify 报告说它们是弱加密 我该如何解决这个问题?

加密

    function encrypt($key, $encrypt)
    {   
        $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
        $pad = $size - (strlen($encrypt) % $size);
        $encrypt = $encrypt . str_repeat(chr($pad), $pad);
        $data = mcrypt_encrypt(MCRYPT_DES, $key, $encrypt, MCRYPT_MODE_CBC, $key);

        return base64_encode($data);
    }

解密

    function decrypt($key, $decrypt)
    {
        $decrypt = base64_decode($decrypt);
        $decrypt = mcrypt_decrypt(MCRYPT_DES, $key, $decrypt, MCRYPT_MODE_CBC, $key);
        $pad = ord($decrypt{strlen($decrypt) - 1});

        if ($pad > strlen($decrypt)) {
            return false;
        }

        if (strspn($decrypt, chr($pad), strlen($decrypt) - $pad) != $pad) {
            return false;
        }

        return substr($decrypt, 0, -1 * $pad);
    }

报告 问题组弱加密

    }

    $size = mcrypt_get_block_size(MCRYPT_DES, MCRYPT_MODE_CBC);
    $pad = $size - (strlen($encrypt) % $size);
    $encrypt = $encrypt . str_repeat(chr($pad), $pad);

    {
        $decrypt = base64_decode($decrypt);
        $decrypt = mcrypt_decrypt(MCRYPT_DES, $key, $decrypt, MCRYPT_MODE_CBC, $key);
        $pad = ord($decrypt{strlen($decrypt) - 1});

【问题讨论】:

  • 那么,使用 less 弱的东西怎么样? DES 多年前被 3DES 取代,但对于新项目,您应该使用更快、更安全的东西,例如 AES (MCRYPT_RIJNDAEL_128)。
  • 使用mcrypt DES 几乎是你能做的最糟糕的事情。
  • 实际上DES被AES取代,这就是加密算法竞争的重点。 3DES 是一种权宜之计,即使使用完整的 168 位密钥也只有 112 位安全性。
  • 最好不要使用mcrypt,它是废弃软件,多年未更新,不支持标准PKCS#7(née PKCS#5)填充,只有非标准空填充可以'甚至不能与二进制数据一起使用。 mcrypt 有许多出色的 bugs 可以追溯到 2003 年。请考虑使用 defuseRNCryptor,它们提供了完整的解决方案并且正在维护并且是正确的。

标签: php encryption des php-5.5


【解决方案1】:

DES,其实就是弱加密。它在 90 年代在 24 小时内被公开破解 - 问题是它的密钥太短,可以通过暴力攻击破解它。它不再适合作为对有动机的攻击者的防御。有许多更好的选择,例如 3DES、AES 和 Twofish。

编辑: 3DES 优于 DES,因为它明显更安全(但仍不如 AES),但它的性能必然比 AES、DES 或 Twofish 差很多(因为您实际上是在应用 DES 三次)。 3DES 很少用于新的实现。

【讨论】:

  • 不,3DES 和 Twofish 不是特别好的选择,除非有充分理解的理由选择另一种对称密钥加密算法,否则应该使用 AES。
  • 我同意,3DES 是一个糟糕的选择(特别是因为它相对较慢)。尽管在安全方面它仍然比单个 DES 好得多,我将在我的帖子中进行编辑以使其更清晰。不过,我认为 Twofish 没有问题,它是 AES 决赛选手,并且仍然被认为是高度安全的(并且很可能在很长一段时间内保持安全)。
  • 我并不讨厌 Twofish 并且知道它的历史和作者。 Twofish 的两个问题: 1. 它的同行评审较少,评审基本上结束了,它没有被选为 AES。 2. 从互操作性的角度来看,有很多系统不能很好地支持它,支持可能在速度方面和认证方面较差。一个例子是 iOS,AES 具有硬件加密支持,并且提供了 500 到 1000 倍的速度提升,CryptoSwift 就是一个例子。同样在 iOS 和 macOS 上,AES 版本通过了 FIPS 140-2 认证(实施审查)。
  • 很公平,这些都是好点。从纯算法的角度来看,我不相信通过使用 AES 而不是 Twofish 会带来实际的安全性改进(实际上,所有 AES 决赛选手似乎都具有良好的安全特性,但这些天你对 Serpent 或 MARS 的了解不多原因),目前还没有已知的实际攻击(我认为还需要一段时间才能出现),但 AES 似乎确实有更好的库支持和同行评审。
猜你喜欢
  • 2014-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多