如何在 Laravel 中比较两个加密 (bcrypt) 密码?
在 Laravel 中,您可以使用 Hash facade 模块来处理密码。它使用 bcrypt 来帮助您安全地存储密码。
Hash facade 的 bcrypt() 方法是哈希密码的强大方法。它可以防止恶意用户破解使用 bcrypt() 生成的密码。
哈希细节可在 config/hashing.php 中找到。默认驱动程序使用 bcrypt() 作为哈希算法。
密码哈希
要使用 Hash Facade,您需要包含该类
Illuminate\Support\Facades\Hash
示例
要哈希密码,您可以使用 make() 方法。这是一个哈希密码的示例
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\Hash; class StudentController extends Controller { public function index() { echo $hashed = Hash::make('password', [ 'rounds' => 15, ]); } }
输出
上述代码的输出是
$2y$15$QKYQhdKcDSsMmIXZmwyF/.sihzQDhxtgF5WNiy4fdocNm6LiVihZi
验证密码是否与哈希密码匹配
要验证明文(即在 Hash::make 中使用的文本)是否与哈希密码匹配,可以使用 check() 方法。
如果明文与哈希密码匹配,则 check() 方法返回 true;如果不匹配,则返回 false。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\Hash; class StudentController extends Controller { public function index() { $hashed = Hash::make('password', [ 'rounds' => 15, ]); if (Hash::check('password', $hashed)) { echo "Password matching"; } else { echo "Password is not matching"; } } }
输出
上述代码的输出是
Password matching
使用 check() 方法
现在让我们尝试使用错误的明文,看看 check() 方法的响应。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\Hash; class StudentController extends Controller { public function index() { $hashed = Hash::make('password', [ 'rounds' => 15, ]); if (Hash::check('password123', $hashed)) { echo "Password matching"; } else { echo "Password is not matching"; } } }
我们在哈希中使用的明文是“password”。在 check 方法中,我们使用了“password123”,由于文本与哈希文本不匹配,因此输出为“密码不匹配”。
输出
在浏览器中执行时,输出将是:
Password is not matching
两次哈希密码
现在让我们对同一文本进行两次哈希,并在 check() 方法中进行比较:
$testhash1 = Hash::make('mypassword'); $testhash2 = Hash::make('mypassword'); if (Hash::check('mypassword', $testhash1) && Hash::check('mypassword', $testhash2)) { echo "Password matching"; } else { echo "Password not matching"; }
您可以在浏览器中测试完整的代码,如下所示:
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\Hash; class StudentController extends Controller { public function index() { $testhash1 = Hash::make('mypassword'); $testhash2 = Hash::make('mypassword'); if (Hash::check('mypassword', $testhash1) && Hash::check('mypassword', $testhash2)) { echo "Password matching"; } else { echo "Password not matching"; } } }
输出
上述代码的输出是:
Password matching
使用 bcrypt() 方法
您也可以尝试使用 bcrypt() 方法,并使用 Hash::check() 测试明文与哈希密码。
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\Student; use Illuminate\Support\Facades\Hash; class StudentController extends Controller { public function index() { $hashedtext = bcrypt('mypassword'); if (Hash::check('mypassword', $hashedtext)) { echo 'Password matches'; } else{ echo 'Password not matching'; } } }
输出
上述代码的输出是:
Password matches
广告