📅  最后修改于: 2023-12-03 15:18:21.885000             🧑  作者: Mango
在 PHP 中,crypt()
函数和password_hash()
函数都是用于密码处理的函数,用于确保用户的密码安全。
crypt()
函数是 PHP 中的一个加密算法函数,它可以根据传入的字符串和盐值进行加密处理。盐值是在加密前附加的一些字符串,用于增强加密效果。
示例代码:
$password = "mypassword";
$salt = "5f4dcc3b5aa765d61d8327deb882cf99"; // 盐值
$encrypted_password = crypt($password, $salt);
echo $encrypted_password;
上述代码将输出一个已经加过盐的密码,如下:
$1$5f4dcc3b$JdcOLaX54KHpr / icLihv1
crypt()
函数的盐值有多种生成方式,常见的有:
不过需要注意的是,crypt()
函数也有一些限制:
因此,在实际使用中,使用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 加密算法,但也支持如下算法:
在实际使用中,password_hash()
函数的建议用法是:
$password = "mypassword";
$options = [
'cost' => 12,
];
$encrypted_password = password_hash($password, PASSWORD_BCRYPT, $options);
echo $encrypted_password;
其中,$options
数组用于提供算法细节,可以指定加密算法的强度和其他参数。cost
选项指定需要花费的 CPU 周期数,值越高,加密结果越安全。但是,值太高会导致加密过程变慢,因此需要根据实际情况选择。