Laravel默认使用了Bcrypt 哈希算法,如果使用了 Laravel 自带的 LoginController 和RegisterController 控制器,它们将会自动在注册和认证时使用该 Bcrypt。
Bcrypt是一种非可逆加密,是散列密码的绝佳选择,因为其“工作因子”是可调整的,这意味着随着硬件功能的提升,生成哈希所花费的时间也会增加。
1、密码生成:
可以调用 Hash 门面上的 make 方法对存储密码进行哈希:
'password' => Hash::make($request->newPassword)
以上加密方法与以下加密方法相同
'password' => bcrypt($request->newPassword)
即以上加两种方法即Hash::make()与bcrypt()加密是同一种加密的不同写法。
注:这是加密,因为此加密为不可逆加密,每一次加密出来的密文都是一样的。
2、密码验证
关于密码验证,由于是不可逆加密,无法使用对旧密码密文解密与新密码进行直接比对。需要使用Hash::check对密码进行匹配。
check 方法允许你验证给定原生字符串和给定哈希是否相等,不过,如果你在使用 Laravel 自带的 LoginController(详见用户认证一节),就不需要再直接使用该方法,因为这个控制器自动调用了该方法。
if (Hash::check('newPassword', $hashedPassword)) { // 密码匹配... // 注:$hashedPassword为数据库中的密码,或旧密码加密密文 }
3、检查密码是否需要被重新哈希
needsRehash 方法允许你判断哈希计算器使用的工作因子在上次密码被哈希后是否发生改变:
if (Hash::needsRehash($hashed)) { $hashed = Hash::make('plain-text'); }
我是华丽的分割线,以下内容切勿混淆。
以上是bcrypt加密,我们有时看到Crypt加密,我原以为是同一个东东。
Crypt 加密方式:
Crypt::encrypt('mytext')
解密方式:
Crypt::dcrypt('这里是我要解密的密文')