PHP password_hash 怎么用

很多人在做网站或者小程序的用户注册功能时,都会纠结“怎么存密码才安全”——总不能直接把用户的123456存进数据库吧?今天要聊的PHP里的password_hash函数,就是专门帮我们解决这个问题的实用工具,就算你是刚接触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%的密码存储安全坑,是做用户系统时必须掌握的基础工具。

上一篇 JavaScript 如何校验身份证