在PHP中散列密码最常用的方法是什么?
散列密码是一种将单个密码转换为另一个称为散列密码的字符串的技术。散列密码一般是单向的,即我们不能从散列密码到原始密码。所以问题是为什么我们需要使用散列来做所有这些事情,如果我们可以将密码作为一个简单的字符串保存到数据库中,为什么还要多走一步。这样做的唯一原因是为了增强安全性,因为黑客不会从我们有价值的站点窃取凭据。这就是为什么我们在创建网站和存储数据库时使用各种散列方法对密码进行散列以保护我们的密码。在PHP中,有各种常用的加密算法,如 md5、crypt、sha1 和 bcrypt。而现在最常用的是bcrypt散列方法。在本文中,我们将学习PHP中的 bcrypt 哈希方法。
PHP提供了一个通用的密码散列函数,用于从密码创建新的密码散列。
句法:
string password_hash(string $password, string $algo, array $options = [])
这里, password_hash函数主要接受三个参数:
- $password:您要对其进行哈希处理的密码采用字符串值。
- $algo:你想用来散列密码的算法。以下是PHP中可用的密码算法。
- PASSWORD_BCRYPT:它使用 CRYPT_BLOWFISH 算法来创建散列。
- PASSWORD_ARGON2I:它使用 Argon2i 算法进行散列。
- PASSWORD_ARGON2ID:它使用 Argon2id 算法进行散列。
- PASSWORD_DEFAULT:它使用 bcrypt 算法进行散列。
- $options:它需要一个盐值默认值是一个随机盐值。盐值,我们在散列时附加到字符串的额外字符串。
返回值:它返回一个哈希密码字符串。
例子:
PHP
PHP
输出:
Password is: GeeksforGeeks
Hashed password using CRYPT_BLOWFISH: $2y$10$V4Cvy4caGAQBLWbw8i/PHOK9lopTYoxyQze3aZ3ocw9dDvju7Wxoi
Hashed password using Argon2i: $argon2i$v=19$m=65536,t=4,p=1$Y2F2TVouVWplYVYucy9DSw$p164c28N85L5v1i8GISN1oao10ZzNm9e/JAyicRaX/w
Hashed password using bcrypt: $2y$10$MQU3vDgoN10.JxyJ1m9UQOEqFy.Jg3D8tmHdZUAAkcpGFRwkbbLfi
笔记: 我们没有使用PASSWORD_ARGON2ID ,因为它在标准PHP安装中不可用。
验证散列密码: PHP提供了一个名为 password_verify 的内置函数,用于将散列密码与原始密码匹配。
句法:
bool password_verify(string $password, string $hash)
参数:
- $password:我们使用散列算法散列的密码。
- $hash:我们将使用原始密码验证的哈希密码。
例子:
PHP
Original Password is: GeeksforGeeks
Hashed Password is: $2y$10$MQU3vDgoN10.JxyJ1m9UQOEqFy.Jg3D8tmHdZUAAkcpGFRwkbbLfi
Password is valid!