繁体   English   中英

如何创建 laravel 散列密码

[英]How to create a laravel hashed password

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

如何创建 laravel 散列密码? 在哪里?

编辑:我知道代码是什么,但我不知道在哪里以及如何使用它,所以它会返回散列密码。 如果我得到散列密码然后我可以手动将它插入到数据库中

Laravel使用 Bcrypt 散列密码:

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

这将创建一个散列密码。 您可以在您的控制器甚至模型中使用它,例如,如果用户使用表单使用POST方法将密码提交给您的控制器,那么您可以使用如下方式散列它:

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

在这里, $hashed将包含散列的密码。 基本上,您将在创建/注册新用户时执行此操作,因此,例如,如果用户使用表单提交诸如nameemailusernamepassword等详细信息,则在将数据插入数据库之前,您'将在验证数据后散列密码。 有关更多信息,请阅读文档

更新:

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

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

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

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

更新(Laravel 5.x):

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

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

$hashedpassword = bcrypt('plaintextpassword');

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

Fn 参考: bcrypt

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

基本用法需要两件事:

首先在您的文件中包含 Facade

use Illuminate\Support\Facades\Hash;

并使用Make Method 生成密码。

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

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

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

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

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

$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

您可以使用以下内容:

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

您可以找到更多信息:这里

这是解决方案:

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

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

在 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;
}
use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
    {
       return true;
    }
    else
    {
        return false;
    }

eg- $plain-text = 'text'; $hashed-text=Hash::make('text');

use Illuminate\Support\Facades\Hash;

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

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

比较 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";
}

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

 $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>";
    }

创建函数

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

调用函数

bcryptGenerator(123456);
// password = 123456

我知道你的痛苦兄弟。 您只需要密码哈希来替换数据库中的密码列字段。 您可以从 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

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

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

好的,这是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 文件中并运行它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM