建议和反馈

请填写你的反馈内容

问答 > 密码学 > 问答详情
求助中

PHP将来自db的加密密码与表单中插入的密码进行比较10LK

我有一个加密密码的数据库。 当用户登录时,我这样做:

$result = mysqli_fetch_assoc(mysqli_query($conn,$query));
$cryptedPass = $result['password'];
$pass = $_POST['password'];
if(strcmp($cryptedPass,md5($pass))==0)
   echo "yeah!";

它有效,但我想知道这是否正确,或者是否有更安全的东西!


2019-08-13
0
请先登陆或注册

高桥优2019-08-13

不要使用MD5。 有很多在线文档可以解释这是多么不安全。 例如:

https://en.wikipedia.org/wiki/MD5

我建议使用crypt()函数。

在这里阅读: http : //php.net/crypt

一个好用的就是CRYPT_BLOWFISH

这是我发现的一个功能,我使用的功能。 不幸的是我不记得我发现它的位置,所以我无法引用作者。

function blowfishEncrypt($string,$rounds) {
        $salt = "";
        $saltCharacters = array_merge(range('A','Z'),range('a','z'),range(0,9));
        for ($i=0;$i<22;$i++) {
            $salt .= $saltCharacters[array_rand($saltCharacters)];
        }
        $hashstring = crypt($string,'$2y$' . $rounds . '$' . $salt);

        return $hashstring;
    }

要创建加密密码,您可以像这样使用它:

$cryptedPass=blowfishEncrypt($clearPass,'07');

然后进行比较,你会使用:

if($cryptedPass==crypt($pass,$cryptedPass)) {
    echo 'Yeah!';
}

注意:如果您在5.3.7之前使用的是PHP版本,则salt前缀必须为$2a$ 。

PHP 5.3.7引入了新的前缀$2y$来修复Blowfish实现中的安全漏洞。


投一票
评论(0)
赞赏(0)
邀请

感谢您的善举,每一次解答会成为新人的灯塔,回答被采纳后获得20算力和相应的LK币奖励