网站导航:首页-WEB前端/后端-PHP的密码散列算法函数

PHP的密码散列算法函数

最近更新:2020-10-31

为了防止数据库管理人员盗取密码信息,通常不会将密码原文存入数据库,而是先对其进行散列运算(或先加盐后再进行散列运算),再将得到的散列值存入数据库。验证密码则通过将密码做同样的运算,再将运算后的值与数据库中的值来对比的方式进行。

PHP中自带密码散列算法的相关函数,可以提供使用足够强度的单向散列算法创建密码的散列,本文我们将介绍这些函数。

password_hash函数

此函数用于创建密码的散列值,其语法如下:

password_hash($password, $algo[, $option])

(一)参数

此函数的参数如下:

$password String 待计算散列值的密码
$algo 使用的算法
$option Array 选项
参数名 数据类型 是否必选 描述

(二)参数中$algo取值

此函数$algo参数可取值如下:

PASSWORD_DEFAULT 使用默认算法,目前默认算法为bcrypt算法,返回的散列值长度为60个字符,但因为默认算法可能随着PHP版本而改变,所以如果需要限制字符位数时建议限制为最长255个字符。
PASSWORD_BCRYPT 使用CRYPT_BLOWFISH算法,返回的散列值为60个字符。
PASSWORD_ARGON2I 使用Argon2算法创建散列。
使用的算法的取值 描述

(三)参数中$option的取值

$option的值为一个数组,此数组由以下字段组成:

salt String 在散列密码时加的盐(干扰字符串),如果未指定此字段,则使用随机盐值。
cost Integer 用来指明算法递归的层数,如果未指定此字段,则取默认值10。
字段 数据类型 是否必选 描述

(四)返回值

成功则返回密码的散列值,失败则返回false。

二、password_verify函数

此函数用于验证密码与散列值是否匹配,其语法如下:

password_verify($password, $hash)

(一)参数

此函数的参数如下:

$password String 待验证的密码
$hash String password_hash函数创建的散列值
参数名 数据类型 是否必选 描述

(二)返回值

当待验证密码与哈希值匹配时返回true,否则返回false。

三、其他密码散列算法函数

除了前面介绍内容外,PHP中还包含如下密码散列算法函数,关于这些函数的用法本文暂不详细介绍:

password_get_info 返回指定散列的相关信息
password_needs_rehash 检测散列值是否匹配指定的选项
函数 描述

(正文完)

如果您认为本文中存在问题或有任何不足之处,欢迎您在Github:Rivalsa/comment中提交issue

到底线啦,请:返回目录页|返回首页