# 服务 —— 哈希
## 1、简介
Laravel `Hash使用该Bcrypt。
Bcrypt是散列密码的绝佳选择,因为其”工作因子“是可调整的,这意味着随着硬件功能的提升,生成哈希所花费的时间也会增加。
## 2、基本使用
可以调用`Hash`门面上的`make`方法散列存储密码:
~~~
<?php
namespace App\Http\Controllers;
use Hash;
use App\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
class UserController extends Controller{
/**
* 更新用户密码
*
* @param Request $request
* @param int $id
* @return Response
*/
public function updatePassword(Request $request, $id)
{
$user = User::findOrFail($id);
// 验证新密码长度...
$user->fill([
'password' => Hash::make($request->newPassword)
])->save();
}
}
~~~
此外,还可以使用全局的帮助函数`bcrypt`:
~~~
bcrypt('plain-text');
~~~
### 2.1 验证哈希密码
`check`方法允许你验证给定原生字符串和给定哈希是否相等,然而,如果你在使用Laravel自带的`AuthController`(详见[用户认证](http://laravelacademy.org/post/163.html)一节),就不需要再直接使用该方法,因为自带的认证控制器自动调用了该方法:
~~~
if (Hash::check('plain-text', $hashedPassword)) {
// 密码匹配...
}
~~~
### 2.2 检查密码是否需要被重新哈希
`needsRehash`方法允许你判断哈希计算器使用的工作因子在上次密码被哈希后是否发生改变:
~~~
if (Hash::needsRehash($hashed)) {
$hashed = Hash::make('plain-text');
}
~~~
- 前言
- 序言
- 序言 ―― 发行版本说明
- 序言 ―― 升级指南
- 序言 ―― 贡献代码
- 开始
- 开始 ―― 安装及配置
- 开始 ―― Laravel Homestead
- 基础
- 基础 ―― HTTP路由
- 基础 ―― HTTP 中间件
- 基础 ―― HTTP 控制器
- 基础 ―― HTTP 请求
- 基础 ―― HTTP 响应
- 基础 ―― 视图
- 基础 ―― Blade模板
- 架构
- 架构 ―― 一次请求的生命周期
- 架构 ―― 应用目录结构
- 架构 ―― 服务提供者
- 架构 ―― 服务容器
- 架构 ―― 契约
- 架构 ―― 门面
- 数据库
- 数据库 ―― 起步
- 数据库 ―― 查询构建器
- 数据库 ―― 迁移
- 数据库 ―― 填充数据
- Eloquent ORM
- Eloquent ORM ―― 起步
- Eloquent ORM ―― 关联关系
- Eloquent ORM ―― 集合
- Eloquent ORM ―― 调整器
- Eloquent ORM ―― 序列化
- 服务
- 服务 ―― 用户认证
- 服务 ―― Artisan 控制台
- 服务 ―― Laravel Cashier(交易)
- 服务 ―― 缓存
- 服务 ―― 集合
- 服务 ―― Laravel Elixir
- 服务 ―― 加密
- 服务 ―― 错误&日志
- 服务 ―― 事件
- 服务 ―― 文件系统/云存储
- 服务 ―― 哈希
- 服务 ―― 帮助函数
- 服务 ―― 本地化
- 服务 ―― 邮件
- 服务 ―― 包开发
- 服务 ―― 分页
- 服务 ―― 队列
- 服务 ―― Redis
- 服务 ―― Session
- 服务 ―― Envoy 任务运行器(SSH任务)
- 服务 ―― 任务调度
- 服务 ―― 测试
- 服务 ―― 验证