温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-11 11:43:44 来源:亿速云 阅读:167 作者:柒染 栏目:大数据

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

最近国家对网络安全要求很严格,我们产品的合作伙伴要求我们使用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;
}

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI