如何创建一个 laravel 哈希密码

Posted

技术标签:

【中文标题】如何创建一个 laravel 哈希密码【英文标题】:How to create a laravel hashed password 【发布时间】:2014-05-15 19:53:03 【问题描述】:

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

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

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

【问题讨论】:

查看如何在 Laravel 中 make Hash and Verify Hash。 对于那些在这里只是手动创建哈希密码的人,您可以使用下面的答案php artisan tinker。例如,echo Hash::make('yourpassword') 【参考方案1】:

Laravel 中使用 Bcrypt 散列密码:

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

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

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

这里,$hashed 将包含散列密码。基本上,您将在创建/注册新用户时执行此操作,例如,如果用户使用表单提交详细信息,例如 nameemailusernamepassword 等,那么在之前您将数据插入数据库,您将在验证数据后散列密码。欲了解更多信息,read the documentation。

更新:

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

因此,您需要将$hashedPassword 插入数据库。希望,现在很清楚,如果您仍然感到困惑,那么我建议您阅读一些教程,在laracasts.com 和tutsplus.com 上观看一些屏幕投射,并在Laravel,this is a free ebook 上阅读一本书,您可以下载它.

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

    转到您的命令提示符/终端 导航到Laravel 安装(您项目的根目录) 使用cd <directory name> 并从命令提示符/终端按回车 然后写php artisan tinker并回车 然后写echo Hash::make('somestring'); 您将在控制台上获得一个散列密码,复制它,然后做任何您想做的事情。

更新(Laravel 5.x):

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

【讨论】:

但是我应该在哪里做这个。我遇到过几次。 我想我问错了。我的数据库(我从别人那里得到的)只有用户的散列密码。现在我想创建一个应该由 laravel 散列的密码。我怎样才能创建一个散列密码,以便我可以在数据库中输入它。 这就是我的回答,要将密码保存到db,您需要对其进行加密,因此,您将使用纯密码对其进行加密Hash::make('passwordstring');,然后保存此哈希密码在数据库中。 但是我该怎么做呢?如果我只是例如创建一个 php 文件,这是行不通的。如您所知,我对 laravel 很陌生 我想我还有一个误导性的问题。因为我明白你在说什么。但是我应该在哪里使用此代码?在哪个文件中或...?因为我只会使用一次。这不是我可以添加用户或其他东西的某种形式。【参考方案2】:

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

$hashedpassword = bcrypt('plaintextpassword');

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

Fn 参考:bcrypt

【讨论】:

你从哪里得到这个函数,它不是 PHP 或 Laravel 的一部分吗? @martinstoeckli 哦原来是L5中的辅助函数laravel.com/docs/5.0/hashing#basic-usage 貌似最近的Laravel 5.1中引入了laravel.com/docs/5.1/helpers#method-bcrypt @Fusion bcrypt 是一种散列算法,而不是加密算法,一旦为它生成散列,您就无法取回纯文本。这是散列算法的重点。您唯一能做的就是检查纯文本是否与您拥有的哈希匹配。 @FreddySidauruk 这行不通,因为 bcrypt 每次都会生成不同的哈希,即使输入密码相同。您将不得不使用check 方法:if (Hash::check('secret', $hashedPassword)) // The passwords match... 参考:laravel.com/docs/5.1/hashing 编辑:如果它对您有帮助,请不要忘记投票;)【参考方案3】:

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

基本用法需要两件事:

首先在文件中包含外观

use Illuminate\Support\Facades\Hash;

并使用Make方法生成密码。

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

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

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

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

【讨论】:

【参考方案4】:

要在数据库中存储密码,请对密码进行哈希处理,然后保存。

$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 

【讨论】:

我喜欢这个答案,因为它告诉 Hash 的位置 (Illuminate\Support\Facades\Hash)【参考方案5】:

如果你想了解 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

【讨论】:

有效。如果只有数据库访问可用,可用于重置密码。【参考方案6】:

解决办法如下:

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

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

【讨论】:

【参考方案7】:

您可以使用以下内容:

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

您可以找到更多信息:here

【讨论】:

【参考方案8】:
use Illuminate\Support\Facades\Hash;

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

您可以使用检查密码 => Hash::check($password, $user->password);

【讨论】:

【参考方案9】:

在 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;

【讨论】:

【参考方案10】:
use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
    
       return true;
    
    else
    
        return false;
    

例如- $plain-text = '文本'; $hashed-text=Hash::make('text');

【讨论】:

是的。这是正确的方法。需要使用 Illuminate\Support\Facades\Hash 。谢谢!【参考方案11】:

比较 laravel 和 lumen 中的密码:

这可能是 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";

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

【讨论】:

【参考方案12】:
 $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>";
    

【讨论】:

【参考方案13】:

创建函数

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

调用函数

bcryptGenerator(123456);
// password = 123456

【讨论】:

这个问题已经有了一个公认的答案,而且比你的解释要好得多。【参考方案14】:

我知道你的痛苦兄弟。您只需要密码哈希来替换数据库中的密码列字段。您可以从 laravel tinker 轻松获得它。 在任何 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

然后为您的用例复制散列通行证。

【讨论】:

【参考方案15】:

好的,这是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 哈希密码的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel 项目中创建密码哈希

Laravel 从带有哈希的表单更新用户密码

Laravel 中的密码验证总是返回失败(Hash::check)

如何在子目录 Laravel 中正确配置 htaccess?

我想自学laraver,请诸位前辈给一些建议,谢谢

Larave中CSRF攻击