PHP实现基于PBKDF2标准的password_hash和password_verify函数是怎样的

PHP实现基于PBKDF2标准的password_hash和password_verify函数是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

成都创新互联公司主营加格达奇网站建设的网络公司,主营网站建设方案,成都App定制开发,加格达奇h5微信小程序开发搭建,加格达奇网站营销推广欢迎加格达奇等地区企业咨询

最近国家对网络安全要求很严格,我们产品的合作伙伴要求我们使用PBKDF2标准来存储密码。由于对这个标准不熟悉,于是我做了点功课。

一个基本的常识,用户的密码不能明文存储,不然,一旦黑客获取到了数据库信息,密码就直接泄露了。

升级一点,密码直接使用sha1或者更高安全的sha2算法,生成散列值,存入数据库,大部分的密码存储就是这样设计的。这样是否就足够安全了呢?

不是,因为黑客依然可以使用彩虹表和暴力破解的方式破解密码。

要解决这两个问题,就要做到以下两点:

1. 密码生成过程中加入随机salt,做到同一个密码每次hash值都不同,使彩虹表失效。

2. 加密算法的运行速度相对比较慢,这样会使黑客的暴力破解成本增加。

目前主流的密码存储算法有bcrypt和PBKDF2等,PHP从5.5开始加入了password_hash和password_verify函数,内置支持了bcrypt算法,如果想加强密码存储的安全性,对算法没有特别要求,可以直接使用。

然而对于需要使用PBKDF2标准处理加密存储,就没有现成的函数可以使用了,不过PHP在5.5开始加入了hash_pbkdf2函数,于是使用这个函数我实现了基于PBKDF2标准的password_hash以及password_verify函数。代码如下:

function password_hash_pbkdf2($password){
    $iterations=1000;
    $length=30;
    $salt = openssl_random_pseudo_bytes(8);
    $salt_encode=base64_encode($salt);
    $hash = hash_pbkdf2("sha256", $password, $salt, $iterations, $length);
    return $hash.$salt_encode;
}

function password_verify_pbkdf2($password,$hash){
    $iterations=1000;
    $length=30;
    $passhash=substr($hash,0,$length);
    $salt=base64_decode(substr($hash,$length));
    $passhash3=hash_pbkdf2("sha256", $password, $salt, $iterations, $length);
    if($passhash==$passhash3){
        return true;
    }
    return false;
}

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注创新互联行业资讯频道,感谢您对创新互联的支持。


标题名称:PHP实现基于PBKDF2标准的password_hash和password_verify函数是怎样的
标题链接:http://ybzwz.com/article/iecgps.html