📜  PHP | crypt(), password_hash() 函数(1)

📅  最后修改于: 2023-12-03 15:18:21.885000             🧑  作者: Mango

PHP | crypt()、password_hash() 函数

在 PHP 中,crypt()函数和password_hash()函数都是用于密码处理的函数,用于确保用户的密码安全。

crypt() 函数

crypt()函数是 PHP 中的一个加密算法函数,它可以根据传入的字符串和盐值进行加密处理。盐值是在加密前附加的一些字符串,用于增强加密效果。

示例代码:

$password = "mypassword";
$salt = "5f4dcc3b5aa765d61d8327deb882cf99"; // 盐值
$encrypted_password = crypt($password, $salt);
echo $encrypted_password;

上述代码将输出一个已经加过盐的密码,如下:

$1$5f4dcc3b$JdcOLaX54KHpr / icLihv1

crypt()函数的盐值有多种生成方式,常见的有:

  • 未加任何参数的情况下生成随机盐值。
  • 以“$数字$盐值”格式传入盐值。
  • 以“$数字回数$盐值”格式传入盐值,其中数字回数指定了密码生成的迭代次数。

不过需要注意的是,crypt()函数也有一些限制:

  • 只能使用支持的算法才能加密,否则将返回false。
  • 生成结果的长度是固定的,且密码不能超过8个字符。

因此,在实际使用中,使用password_hash()函数会更加适合。

password_hash() 函数

password_hash()函数是 PHP 5.5.0 后提供的密码哈希加密算法,它返回密码的哈希值,并且自动选择合适的盐值。它支持多种加密算法,可以自动根据系统能力来选择加密算法。

示例代码:

$password = "mypassword";
$encrypted_password = password_hash($password, PASSWORD_DEFAULT);
echo $encrypted_password;

上述代码将输出一个已经加过盐的密码。由于password_hash()函数是随机生成盐值,并且支持多种加密算法,所以每次运行代码都会生成不同的哈希值。

password_hash()函数默认使用的是 BCRYPT 加密算法,但也支持如下算法:

  • ARGON2I
  • ARGON2ID
  • DEFAULT

在实际使用中,password_hash()函数的建议用法是:

$password = "mypassword";
$options = [
    'cost' => 12,
];
$encrypted_password = password_hash($password, PASSWORD_BCRYPT, $options);
echo $encrypted_password;

其中,$options数组用于提供算法细节,可以指定加密算法的强度和其他参数。cost选项指定需要花费的 CPU 周期数,值越高,加密结果越安全。但是,值太高会导致加密过程变慢,因此需要根据实际情况选择。