如何创建laravel哈希密码

时间:2014-04-03 19:16:11

标签: php security laravel hash passwords

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

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

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

13 个答案:

答案 0 :(得分:140)

Laravel中使用Bcrypt哈希密码:

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

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

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

此处,$hashed将包含散列密码。基本上,您在创建/注册新用户时会这样做,例如,如果用户提交了诸如nameemailusername和{{1}等详细信息使用表单,然后在将数据插入数据库之前,您将在验证数据后散列密码。有关详细信息,请read the documentation

<强>更新

password

因此,您将$password = 'JohnDoe'; $hashedPassword = Hash::make($password); echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy 插入数据库。希望,现在很清楚,如果你仍然感到困惑,那么我建议你阅读一些教程,在laracasts.comtutsplus.com上观看一些屏幕演员,并阅读$hashedPassword上的书,{{ 3}},你可以下载它。

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

  1. 转到命令提示符/ terminal
  2. 导航到artisan tinker安装(项目的根目录)
  3. 使用Laravel并在命令提示符/终端
  4. 中按Enter键
  5. 然后写下cd <directory name>并按Enter
  6. 然后写php artisan tinker
  7. 您将在控制台上获得一个哈希密码,复制它然后做您想做的任何事情。
  8. 更新(Laravel 5.x):

    echo Hash::make('somestring');

答案 1 :(得分:14)

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

$hashedpassword = bcrypt('plaintextpassword');

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

Fn Ref:bcrypt

答案 2 :(得分:5)

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

基本用法需要两件事:

首先在文件中包含Facade

use Illuminate\Support\Facades\Hash;

并使用Make方法生成密码。

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

如果您想匹配Hashed字符串,可以使用以下代码:

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

您可以使用以下用于散列的Laravel文档链接了解更多信息: https://laravel.com/docs/5.5/hashing

答案 3 :(得分: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 
}

答案 4 :(得分:2)

您可以使用以下内容:

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

您可以找到更多信息:here

答案 5 :(得分:2)

如果您想了解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 :(得分:1)

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

答案 7 :(得分:0)

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

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

答案 8 :(得分:0)

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

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

答案 9 :(得分:0)

这是解决方案:

const newUser = new FormData(); 
newUser.append('firstName', user.firstName);

N.B:在控制器的最开始使用第一行代码。最后但并非最不重要的一点是,使用控制器功能内的其余两行代码,在提交from之后,您要在其中处理数据。编码愉快:)

答案 10 :(得分:0)

use Illuminate\Support\Facades\Hash;

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

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

答案 11 :(得分:0)

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

答案 12 :(得分:-5)

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