我想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});
答案 0 :(得分:1)
DES 实际上是弱加密。它在90年代的24小时内被公开打破 - 问题在于它的关键太短,有可能用蛮力攻击破解它。它不再适合作为对抗有动力的攻击者的防御。有许多更好的选择,例如3DES,AES和Twofish。
编辑: 3DES比DES更好,因为它显着更安全(但仍然不如AES安全),但其性能必然明显差于AES,DES或Twofish(因为你基本上是应用DES三次)。 3DES很少用于新的实现。