해시시
ㅋㅋ
- 소개
- Laravel
Hash
외관 사용자 비밀번호를 저장하기 위한 안전한 Bcrypt 및 Argon2 해시 암호화 방법을 제공합니다. Laravel 애플리케이션에 내장된LoginController
및RegisterController
클래스를 사용하는 경우 기본적으로 등록 및 인증에 Bcrypt를 사용합니다. {tip} Bcrypt는 "암호화 계수"를 임의로 조정할 수 있기 때문에 비밀번호 해싱에 이상적입니다. 즉, 하드웨어 성능이 증가함에 따라 해시 생성에 필요한 시간이 늘어날 수 있습니다.
Configuration config/hashing.php<에서 구성할 수 있습니다< /code > 구성 파일에서 기본 해시 드라이버를 구성합니다. 현재 세 가지 드라이버가 지원됩니다: Bcrypt
{note} Argon2i 드라이버에는 PHP 7.2.0 이상이 필요하고, Argon2id 드라이버에는 PHP 7.3.0 이상이 필요합니다.
{tip} Bcrypt 是哈希密码的理想选择,因为它的 「加密系数」 可以任意调整,这意味着生成哈希所需的时间可以随着硬件功率的增加而增加。
配置
你可以在 config/hashing.php
配置文件中配置默认哈希驱动程序。目前支持三种驱动程序:Bcrypt 和 Argon2 (Argon2i and Argon2id variants)。
{note} Argon2i 驱动程序需要 PHP 7.2.0 或更高版本,而 Argon2id 驱动程序则需要 PHP 7.3.0 或更高版本。
基本用法
你可以通过调用 Hash
facade 的 make
Hash
를 호출할 수 있습니다. 비밀번호를 암호화하는 Facade의 make
메소드: 🎜<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\Hash; use App\Http\Controllers\Controller;class UpdatePasswordController extends Controller{ /** * 更新用户密码。 * * @param Request $request * @return Response */ public function update(Request $request) { // 验证新密码的长度 $request->user()->fill([ 'password' => Hash::make($request->newPassword) ])->save(); } }🎜🎜
Bcrypt 암호화 계수 조정
Bcrypt 알고리즘을 사용하는 경우 make
메서드의 rounds
옵션을 사용하여 알고리즘의 암호화 계수를 구성할 수 있습니다. 그러나 대부분의 애플리케이션에서는 기본값이면 충분합니다. make
方法中使用 rounds
选项来配置该算法的加密系数。然而,对大多数应用程序来说,默认值就足够了:
$hashed = Hash::make('password', [ 'rounds' => 12 ]);
调整 Argon2 加密系数
如果使用 Argon2 算法,你可以在 make
方法中使用 memory
, time
和 threads
选项来配置该算法的加密系数。然后,对大多数应用程序来说,默认值就足够了:
$hashed = Hash::make('password', [ 'memory' => 1024, 'time' => 2, 'threads' => 2, ]);
{tip} 有关这些选项的更多信息,请查阅 PHP 官方文档。
密码哈希验证
check
方法能为您验证一段给定的未加密字符串与给定的哈希值是否一致。然而,如果您使用 Laravel 内置的 LoginController
控制器,您可能不需要直接使用这个方法,因为该控制器会自动调用这个方法:
if (Hash::check('plain-text', $hashedPassword)) { // 密码匹配 }
检查密码是否需要重新哈希
needsRehash
if (Hash::needsRehash($hashed)) { $hashed = Hash::make('plain-text'); }
check
메소드를 사용하면 암호화되지 않은 주어진 문자열이 다음과 같은지 확인할 수 있습니다. 가치는 일관적이다. 그러나 Laravel의 내장 LoginController
컨트롤러를 사용하는 경우 컨트롤러가 자동으로 이 메서드를 호출하므로 이 메서드를 직접 사용할 필요가 없을 수도 있습니다: 🎜rrreee