如何创建laravel哈希密码

Gra*_*ham 72 php security passwords hash laravel

我正在尝试为Laravel创建一个哈希密码.现在有人告诉我使用Laravel哈希助手,但我似乎无法找到它,或者我正朝错误的方向看.

如何创建laravel哈希密码?在哪里?

编辑:我知道代码是什么,但我不知道在哪里以及如何使用它,所以它给了我回哈希密码.如果我得到哈希密码,那么我可以手动将其插入数据库

The*_*pha 154

使用Bcrypt哈希密码Laravel:

$password = Hash::make('yourpassword');
Run Code Online (Sandbox Code Playgroud)

这将创建一个哈希密码.您可以在控制器中甚至在模型中使用它,例如,如果用户使用POST方法使用表单向控制器提交密码,那么您可以使用以下方法对其进行散列:

$password = Input::get('passwordformfield'); // password is form field
$hashed = Hash::make($password);
Run Code Online (Sandbox Code Playgroud)

这里$hashed将包含散列密码.基本上,你会创建/注册新用户时做到这一点,因此,举例来说,如果用户提交的细节,例如,name,email,usernamepassword等使用的形式,那么你将数据插入到数据库之前,你会散列验证数据后的密码.有关更多信息,请阅读文档.

更新:

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

所以,你将插入$hashedPassword到数据库中.希望,现在很清楚,如果你仍然感到困惑,那么我建议你阅读一些教程,在laracasts.comtutsplus.com上观看一些屏幕演员并阅读一本书Laravel,这是一本免费的电子书,你可以下载它.

更新:因为OP想要使用Laravel手动加密密码Hash而没有任何类或形式,所以这是使用artisan tinker命令提示符的另一种方法:

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

更新(Laravel 5.x):

// Also one can use bcrypt
$password = bcrypt('JohnDoe');
Run Code Online (Sandbox Code Playgroud)


Zub*_*ain 27

我知道你的痛苦兄弟。您只需要密码哈希来替换数据库中的密码列字段。您可以从 Laravel Tinker 轻松获取它。\n在任何 Laravel 项目命令行中输入:

\n
\xe2\x9d\xaf php artisan tinker\nPsy Shell v0.9.12 (PHP 7.4.27 \xe2\x80\x94 cli) by Justin Hileman\n>>> echo Hash::make('123456');\n$2y$10$JHK.2MTc9ORMmmlqoF.gg.SwDLnevVSj1oreHParu5PvcPEDOWqe6\n
Run Code Online (Sandbox Code Playgroud)\n

然后复制您的用例的哈希传递。

\n


Rao*_*Rao 14

Laravel 5使用bcrypt.所以,你也可以这样做.

$hashedpassword = bcrypt('plaintextpassword');
Run Code Online (Sandbox Code Playgroud)

您可以将其输出保存到数据库表的密码字段中.

Fn参考:bcrypt

  • @Fusion bcrypt 是一种散列算法,而不是一种加密算法,一旦为它生成散列,散列就无法取回纯文本。这就是散列算法的全部意义所在。您唯一能做的就是检查纯文本是否与您拥有的哈希匹配。 (2认同)

Som*_*luk 8

要将密码存储在数据库中,请对密码进行散列,然后保存。

$password = Input::get('password_from_user'); 
$hashed = Hash::make($password); // save $hashed value
Run Code Online (Sandbox Code Playgroud)

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

// $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 
}
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个答案,因为它告诉了 Hash 的位置(Illuminate\Support\Facades\Hash) (5认同)

Pra*_*rve 7

Laravel Hash外观提供安全的Bcrypt哈希存储用户密码。

基本用法需要两件事:

首先在文件中包含Facade

use Illuminate\Support\Facades\Hash;
Run Code Online (Sandbox Code Playgroud)

并使用MakeMethod生成密码。

$hashedPassword = Hash::make($request->newPassword);
Run Code Online (Sandbox Code Playgroud)

当您想要匹配哈希字符串时,可以使用以下代码:

Hash::check($request->newPasswordAtLogin, $hashedPassword)
Run Code Online (Sandbox Code Playgroud)

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


小智 6

如果您想了解 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 ));
Run Code Online (Sandbox Code Playgroud)

散列密码与 laravel 5.x bcrypt 密码相同。无需提供盐和成本,它将采用其默认值。

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