如何创建一个 laravel 散列密码

我正在尝试为 Laravel 创建一个散列密码。现在有人告诉我使用 Laravel 散列助手,但我似乎找不到它,或者我看错了方向。

How do I create a laravel hashed password? And where?

编辑: 我知道密码是什么,但我不知道在哪里和如何使用它,所以它给我回来的散列密码。如果我得到哈希密码,然后我可以手动插入到数据库中

292351 次浏览

Laravel中使用 Bcrypt 散列密码:

$password = Hash::make('yourpassword');

This will create a hashed password. You may use it in your controller or even in a model, for example, if a user submits a password using a form to your controller using POST method then you may hash it using something like this:

$password = Input::get('passwordformfield'); // password is form field
$hashed = Hash::make($password);

Here, $hashed will contain the hashed password. Basically, you'll do it when creating/registering a new user, so, for example, if a user submits details such as, name, email, username and password etc using a form, then before you insert the data into database, you'll hash the password after validating the data. For more information, 阅读文件.

更新:

$password = 'JohnDoe';
$hashedPassword = Hash::make($password);
echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy

So, you'll insert the $hashedPassword into database. Hope, it's clear now and if still you are confused then i suggest you to read some tutorials, watch some screen casts on Laracasts.com and tutsplus.com and also read a book on Laravel, 这是一本免费的电子书, you may download it.

更新: 由于 OP希望使用 Laravel Hash手动加密密码,而不使用任何类或表单,因此这是从命令提示符使用 artisan tinker的一种替代方法:

  1. Go to your command prompt/terminal
  2. 导航到 Laravel安装(项目的根目录)
  3. 使用 cd <directory name>并从命令提示符/终端按回车键
  4. 然后写入 php artisan tinker并按回车键
  5. 然后写 echo Hash::make('somestring');
  6. 您将在控制台上获得一个哈希密码,复制它,然后做任何您想做的事情。

更新(Laravel5.x) :

// Also one can use bcrypt
$password = bcrypt('JohnDoe');

你可使用以下连结:

$hashed_password = Hash::make('Your Unhashed Password');

您可以找到更多信息: here

这是 hash.php 中 make 函数的一段摘录

    $work = str_pad(8, 2, '0', STR_PAD_LEFT);


// Bcrypt expects the salt to be 22 base64 encoded characters including
// dots and slashes. We will get rid of the plus signs included in the
// base64 data and replace them with dots.
if (function_exists('openssl_random_pseudo_bytes'))
{
$salt = openssl_random_pseudo_bytes(16);
}
else
{
$salt = Str::random(40);
}


$salt = substr(strtr(base64_encode($salt), '+', '.'), 0 , 22);


echo crypt('yourpassword', '$2a$'.$work.'$'.$salt);

只需将它复制/粘贴到一个 php 文件中并运行它。

Laravel 5使用 bcrypt,因此,您也可以这样做。

$hashedpassword = bcrypt('plaintextpassword');

输出,可以将其保存到数据库表的 password 字段中。

编号: 地下室

在 BcryptHasher.php 中,您可以找到哈希代码:

public function make($value, array $options = array())
{
$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;


$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));


$hash = password_hash($value, PASSWORD_BCRYPT, array('cost' => $cost));
echo $value.' '.PASSWORD_BCRYPT.' '.$cost.' ';
echo $hash;die();
if ($hash === false)
{
throw new RuntimeException("Bcrypt hashing not supported.");
}


return $hash;
}

To store password in database, make hash of password and then save.

$password = Input::get('password_from_user');
$hashed = Hash::make($password); // save $hashed value

要验证密码,从数据库中获取帐户的密码存储

// $user is database object
// $inputs is Input from user
if( \Illuminate\Support\Facades\Hash::check( $inputs['password'], $user['password']) == false) {
// Password is not matching
} else {
// Password is matching
}

如果你想了解 laravel 的工作原理,你可以在 Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php上查看完整的类

但是基本上有三种 PHP 方法可以解决这个问题:

$pasword = 'user-password';
// To create a valid password out of laravel Try out!
$cost=10; // Default cost
$password = password_hash($pasword, PASSWORD_BCRYPT, ['cost' => $cost]);


// To validate the password you can use
$hash = '$2y$10$NhRNj6QF.Bo6ePSRsClYD.4zHFyoQr/WOdcESjIuRsluN1DvzqSHm';


if (password_verify($pasword, $hash)) {
echo 'Password is valid!';
} else {
echo 'Invalid password.';
}


//Finally if you have a $hash but you want to know the information about that hash.
print_r( password_get_info( $password_hash ));

散列密码与 laravel 5.x bcrypt 密码相同。不需要给盐和成本,它将采取其默认值。

这些方法已经在 laravel 类中实现,但是如果你想了解更多,请查看官方文档: http://php.net/manual/en/function.password-hash.php

Laravel Hash facade 为存储用户密码提供了安全的 Bcrypt 哈希。

基本用法需要两点:

首先在文件中包含 Facade

use Illuminate\Support\Facades\Hash;

并使用 Make方法生成密码。

$hashedPassword = Hash::make($request->newPassword);

当你想匹配哈希字符串时,你可以使用下面的代码:

Hash::check($request->newPasswordAtLogin, $hashedPassword)

你可以通过下面的 Laravel 文档链接了解更多关于 Hash 的信息: https://laravel.com/docs/5.5/hashing

比较密码在幼虫和流明:

这可能是 bcrypt 函数不能与 php7一起工作,那么你可以使用下面的代码在 laravel 和 lumen 根据你的要求:

use Illuminate\Support\Facades\Hash;


$test = app('hash')->make("test");
if (Hash::check('test', $test)) {
echo "matched";
} else {
echo "no matched";
}

我希望,这个帮助会让你开心:)

use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
{
return true;
}
else
{
return false;
}

$Plain- 文本 = ‘ text’; $Hash-text = Hash: : make (‘ text’) ;

解决办法如下:

use Illuminate\Support\Facades\Hash;
$password = request('password'); // get the value of password field
$hashed = Hash::make($password); // encrypt the password

注意: 在控制器的开头使用第一行代码。最后但并非最不重要的是,使用控制器函数内的其余两行代码,在提交 from 之后,您希望在这两行代码中使用数据进行操作。快乐编码:)

use Illuminate\Support\Facades\Hash;

您可以使用哈希密码 = > Hash: : make (‘ yourpassword’) ;

可以使用 checkpassword = > Hash: : check ($password,$user-> password) ;

 $data->password = Hash::make(($request->password));  //Password
Encripted


//Login code


if ($data = AddEmployee::where('name', $request->name)->first()) {
$pass = Hash::check($request->password, $data->password);
if ($pass) {
echo "sucess";
} else {
echo "Password Not Valid";
}
} else {
echo "Username Not Valid" . "<br>";
}

Create a function


public function bcryptGenerator($password)
{
return \bcrypt($password);
}

调用函数

bcryptGenerator(123456);
// password = 123456

我知道你的痛苦,兄弟。您只需要密码 Hash 来替换数据库中的 password 列字段。你可以很容易地从幼虫修补匠那里得到它。 在任何 laravel 项目命令行类型:

❯ php artisan tinker
Psy Shell v0.9.12 (PHP 7.4.27 — cli) by Justin Hileman
>>> echo Hash::make('123456');
$2y$10$JHK.2MTc9ORMmmlqoF.gg.SwDLnevVSj1oreHParu5PvcPEDOWqe6

then copy the hashed pass for your use case.

在用于插入密码的 Controller 中,只需使用‘ use Hash;’。