如何创建Laravel哈希密码


98

我正在尝试为Laravel创建哈希密码。现在有人告诉我使用Laravel哈希帮助器,但我似乎找不到它,或者我的方向错误。

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

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


1
检查如何在Laravel中进行哈希和验证哈希
Somnath Muluk

3
对于那些只是在此处手动创建哈希密码的人,您可以在下方使用答案php artisan tinker。例如,echo Hash::make('yourpassword')
sinaza

Answers:


186

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 tinkerfrom命令提示符的另一种方法:

  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');


但是我应该在哪里做。我遇到了几次。
Graham

我想我问错了。我的数据库(我从别人那里得到的)只有用户的哈希密码。现在我想创建一个密码,该密码应由laravel散列。我如何创建哈希密码,以便可以在数据库中输入该密码。
Graham

这就是我的回答,要将密码保存到db您中需要对其进行加密,因此,您将使用普通密码从密码中进行加密Hash::make('passwordstring');,然后将此哈希密码保存在数据库中。
Alpha

但是我该怎么做呢?如果我只是例如创建一个php文件,则无法正常工作。如您所知,我对laravel还是很陌生
Graham

我认为我还有一个误导性的问题。因为我理解你在说什么。但是我应该在哪里使用此代码?在哪个文件或...中?因为我只会使用一次。我可以添加用户或其他东西不是某种形式。
格雷厄姆

17

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

$hashedpassword = bcrypt('plaintextpassword');

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

Fn参考:bcrypt


您从哪里获得此函数,它不是PHP或Laravel的一部分?
martinstoeckli 2015年

1
@martinstoeckli哦,是的,它是L5中的辅助函数,laravel.com / docs / 5.0 / hashing#basic
Nagendra Rao

好像它是在最近的Laravel 5.1中引入的laravel.com/docs/5.1/helpers#method-bcrypt
Nagendra Rao

2
@Fusion bcrypt是一种哈希算法,而不是加密算法,使用哈希算法,一旦为其生成哈希,就无法取回纯文本。这就是哈希算法的重点。您唯一可以做的就是检查纯文本是否与您拥有的哈希匹配。
Nagendra Rao

1
@FreddySidauruk,这是行不通的,因为即使输入密码相同,bcrypt每次都会生成不同的哈希值。您将必须使用以下check方法:if (Hash::check('secret', $hashedPassword)) { // The passwords match... }参考:laravel.com/docs/5.1/hashing编辑:如果答案对您有所帮助,请不要忘了投票;)
Nagendra Rao

11

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

基本用法需要两件事:

首先在文件中包含Facade

use Illuminate\Support\Facades\Hash;

并使用MakeMethod生成密码。

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

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

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

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


7

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

$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
我喜欢这个答案,因为它告诉了哈希的位置(Illuminate \ Support \ Facades \ Hash)
shintaroid

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

哈希密码与laravel 5.x bcrypt密码相同。无需添加盐和成本,它将采用其默认值。

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


作品。如果仅数据库访问可用,可用于重置密码。
air4x

2

您可以使用以下内容:

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

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


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

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

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


是。这是正确的方法。需要使用Illuminate \ Support \ Facades \ Hash。谢谢!
Nole

1

解决方法如下:

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

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


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

我希望,这种帮助会使您高兴:)


-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文件中并运行即可。


1
这确实是不好的做法。除非您非常精通加密技术,否则您应该只使用内置的已制成的哈希函数即可。
尼克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.