您现于de位置乃:亚博 > APP函数

亚博 2020-02-11 APP函数 46

password_hash

传统de用户名和密码都采用加盐de方式存储加密信息 盐值也需要存储.

自APP5.5.0之后 新增加了密码散列算法函数(password_hash) password_hash() 使用足够强度de单向散列算法创建密码de散列(hash). password_hash() 兼容 crypt(). 所以 crypt() 创建de密码散列也可用于 password_hash().

说明

password_hash不需要再单独存储盐值 而且每次加密de值都不1样 我们只需要存储加密字符串 验证时用password_verify()方法即可得出结果!

当前支持de算法:

PASSWORD_DEFAULT - 使用 bcrypt 算法 (APP 5.5.0 默认). 注意 该常量会随着 APP 加入更新更高强度de算法而改变. 所以 使用此常量生成结果de长度将于未来有变化. 因此 数据库里储存结果de列可超过60个字符(好的乃255个字符).

PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法创建散列. 这会产生兼容使用 "$2y$" de crypt(). 结果将会乃 60 个字符de字符串 或者于失败时返回 FALSE.

PASSWORD_ARGON2I - 使用 Argon2 散列算法创建散列.

返回值:

返回散列后de密码 或者于失败时返回 FALSE.

使用de算法 cost 和盐值作为散列de1部分返回.所以验证散列值de所有信息都已经包含于内. 这使 password_verify() 函数验证de时候 不需要额外储存盐值或者算法de信息.

/**
 * 我们想要使用默认算法散列密码
 * 当前乃 BCRYPT 并会产生 60 个字符de结果.
 *
 * 请注意 随时间推移 默认算法可能会有变化 
 * 所以需要储存de空间能够超过 60 字(255字不错)
 */


password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

输出类似结果:
$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

验证

$inputValue = '123456'; //用户输入de密码
if(password_verify( $inputValue, '数据库存储de密码')){
    //如果为真 则验证成功
}

输出:
True  或 False


评论