PHP password_hash 怎么用
很多人在做网站或者小程序的用户注册功能时,都会纠结“怎么存密码才安全”——总不能直接把用户的123456存进数据库吧?今天要聊的PHP里的password_hash函数,就是专门帮我们解决这个问题的实用工具,就算你是刚接触PHP的新手,也能快速上手。
为什么不能直接存明文密码?
先举个生活化的例子:你把家门钥匙直接放在小区门口的信箱里,谁都能拿,风险拉满。密码就像家门钥匙,直接存明文(就是用户输入的原密码),万一数据库被黑客拿到,所有用户的密码就全泄露了。而password_hash做的,就是给这把钥匙换个“加密锁芯”,就算拿到加密后的内容,也没法还原成原密码。

password_hash 怎么用?记住2步核心操作
这个函数的用法特别简单,总共就两个核心场景:注册时加密密码存数据库,登录时验证输入的密码是否正确,完全不用你自己算复杂的加密规则,自带安全机制。
第一步:注册时,把用户密码加密后存数据库
用户注册时,先拿到他们填的密码,直接用password_hash()处理,再把加密后的结果存进数据库就行,不用管加密细节,函数会自动处理。
举个具体的代码例子(不用怕,就是几行简单代码):
`php
// 1. 拿用户注册时填的密码(实际是从表单获取,比如$_POST['pwd'])
$userInputPwd = '用户注册时填的密码123';
// 2. 用password_hash加密,PASSWORD_DEFAULT是PHP推荐的默认加密算法,安全有保障
$encryptedPwd = password_hash($userInputPwd, PASSWORD_DEFAULT);
// 3. 把$encryptedPwd存到数据库的用户表密码字段里,比如用户ID、加密密码对应存好
`
这里提一句,别自己加什么MD5、SHA1,那些早就被破解了,PASSWORD_DEFAULT是PHP官方迭代的算法,会自动切换最新的安全加密方式,不用你手动更新,省心又安全。
第二步:登录时,验证用户输入的密码是否匹配
用户登录时,输入密码后,你得拿他们填的密码,和数据库里存的加密密码做对比,这时候要用到password_verify()函数,别自己用==对比,肯定不对。
代码例子也很简单:
`php
// 1. 拿用户登录时填的密码(比如$_POST['login_pwd'])
$loginInputPwd = '用户登录时填的密码123';
// 2. 从数据库里查到对应用户的加密密码(比如用户ID是1,查到的加密串是之前存的$encryptedPwd)
$dbEncryptedPwd = '数据库里存的加密密码串';
// 3. 验证两个密码是否匹配
if (password_verify($loginInputPwd, $dbEncryptedPwd)) {
echo '登录成功!';
} else {
echo '密码错误,请重试!';
}
`
这里有个关键点:就算是同一个密码,每次用password_hash加密后的结果都不一样,因为函数会自动加随机的“盐值”(就像给钥匙配了不同的钥匙扣),所以不能直接用字符串对比,必须用官方的password_verify,这是安全的核心。
常见的小疑问解答
很多新手会问:加密后的密码长度会不会很长?其实不管用不用默认算法,存到数据库的话,把密码字段设成255个字符就够了,完全不用担心存不下。还有,要不要自己设置加密难度?不用,PASSWORD_DEFAULT已经是最优的,要是想调整也可以传第三个参数,比如['cost' => 10],但普通网站默认就够,不用瞎折腾。
其实password_hash就是PHP官方给开发者准备的“密码安全小助手”,不用懂复杂的加密原理,按步骤用就行,能帮你避开90%的密码存储安全坑,是做用户系统时必须掌握的基础工具。