DES加密,但Fortify报告PHP 5.5.22上的弱加密

时间:2016-07-14 03:00:30

标签: php encryption des php-5.5

我想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);
    }

报告 IssueGroup弱加密

    }

    $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});

1 个答案:

答案 0 :(得分:1)

DES 实际上是弱加密。它在90年代的24小时内被公开打破 - 问题在于它的关键太短,有可能用蛮力攻击破解它。它不再适合作为对抗有动力的攻击者的防御。有许多更好的选择,例如3DES,AES和Twofish。

编辑: 3DES比DES更好,因为它显着更安全(但仍然不如AES安全),但其性能必然明显差于AES,DES或Twofish(因为你基本上是应用DES三次)。 3DES很少用于新的实现。