password_hash( string $password, int $algo[, array $options] ) : string

这个函数是专门用来创建密码的hash值的。兼容 crypt()

参数

$password

明文密码

$algo

要用的算法。
当前支持的算法:

  • PASSWORD_DEFAULT - 使用 bcrypt 算法 (PHP 5.5.0 默认)。注意,该常量会随着 PHP 加入更新更高强度的算法而改变。所以,使用此常量生成结果的长度将在未来有变化。因此,数据库里储存结果的列可超过60个字符(最好是255个字符)。
  • PASSWORD_BCRYPT - 使用 CRYPT_BLOWFISH 算法创建散列。这会产生兼容使用 "$2y$" 的 crypt()。结果将会是 60 个字符的字符串, 或者在失败时返回 FALSE。
  • PASSWORD_ARGON2I - 使用 Argon2 散列算法创建散列。

$options

可以提供的参数,不同的算法,能提供的参数不一样。

  • PASSWORD_BCRYPT 能用两个参数:

    • salt :盐值,不提供的话系统自动生成,从 PHP7 开始已经废弃这个选项了。
    • cost :不知道怎么翻译,目测指的是加密成本,默认是10。
  • PASSWORD_ARGON2I 能用三个参数:

    • memory_cost (integer) - 计算 Argon2 散列时的最大内存(单位:字节 byte)。默认值: PASSWORD_ARGON2_DEFAULT_MEMORY_COST。
    • time_cost (integer) - 计算 Argon2 散列时最多的时间。默认值: PASSWORD_ARGON2_DEFAULT_TIME_COST。
    • threads (integer) - 计算 Argon2 散列时最多的线程数。默认值: PASSWORD_ARGON2_DEFAULT_THREADS。

demo

echo  password_hash('admin', PASSWORD_DEFAULT);
// PHP 7.4.9 
// 这个因为有盐值,每次生成的结果可能不一样,不能直接用等号比较 
//$2y$10$Vww0XNs0wOZOLcm0F6dchOJxaoqB8lLbdLoMcul2teF9cpUkOmX/q

echo password_hash('admin',)

password_get_info( string $hash) : array

返回加密散列的信息。

demo

print_r(password_get_info('123'));
// 输出
Array
(
    [algo] =>
    [algoName] => unknown
    [options] => Array
        (
        )

)

print_r(password_get_info('$2y$10$Vww0XNs0wOZOLcm0F6dchOJxaoqB8lLbdLoMcul2teF9cpUkOmX/q'));
// 输出
Array
(
    [algo] => 2y
    [algoName] => bcrypt
    [options] => Array
        (
            [cost] => 10
        )

)

password_verify( string $password, string $hash) : bool

验证输入的密码是否正确。

var_dump(password_verify('123','123'));
// boolean:false
var_dump(password_verify('admin','$2y$10$g6u5Dp7xuT3pggHZLE5tF.PtsSnuQW4B9AePvlqP7HQjBgP9Ycd1S'));
// boolean:true

本文由 yang 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

楼主残忍的关闭了评论