【发布时间】: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 位安全性。
标签: php encryption des php-5.5