Cách tạo mật khẩu băm laravel


94

Tôi đang cố gắng tạo mật khẩu băm cho Laravel. Bây giờ ai đó đã nói với tôi sử dụng trình trợ giúp băm Laravel nhưng dường như tôi không thể tìm thấy nó hoặc tôi đang nhìn sai hướng.

Làm cách nào để tạo mật khẩu băm laravel? Và ở đâu?

Chỉnh sửa: Tôi biết mã là gì nhưng tôi không biết ở đâu và làm thế nào để sử dụng nó nên nó trả lại cho tôi mật khẩu đã băm. Nếu tôi nhận được mật khẩu đã băm thì tôi có thể chèn thủ công vào cơ sở dữ liệu


1
Kiểm tra cách tạo Hash và Xác minh Hash trong Laravel.
Somnath Muluk

2
Đối với những người ở đây chỉ cần tạo một mật khẩu băm theo cách thủ công, bạn có thể sử dụng câu trả lời bên dưới với php artisan tinker. Ví dụ:echo Hash::make('yourpassword')
sinaza,

Câu trả lời:


184

Băm mật khẩu bằng Bcrypt trong Laravel:

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

Điều này sẽ tạo ra một mật khẩu được băm. Bạn có thể sử dụng nó trong bộ điều khiển của mình hoặc thậm chí trong một mô hình, ví dụ: nếu người dùng gửi mật khẩu bằng biểu mẫu đến bộ điều khiển của bạn bằng POSTphương pháp thì bạn có thể băm nó bằng cách sử dụng một cái gì đó như sau:

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

Tại đây, $hashedsẽ chứa mật khẩu đã băm. Về cơ bản, bạn sẽ làm điều đó khi tạo / đăng ký người dùng mới, vì vậy, ví dụ, nếu một lần gửi người sử dụng chi tiết như, name, email, usernamepasswordvv sử dụng một hình thức, sau đó trước khi bạn chèn dữ liệu vào cơ sở dữ liệu, bạn sẽ băm mật khẩu sau khi xác thực dữ liệu. Để biết thêm thông tin, hãy đọc tài liệu .

Cập nhật:

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

Vì vậy, bạn sẽ chèn $hashedPasswordvào cơ sở dữ liệu. Hy vọng, bây giờ nó đã rõ ràng và nếu bạn vẫn còn bối rối thì tôi khuyên bạn nên đọc một số hướng dẫn, xem một số màn hình trên laracasts.comtutsplus.com và cũng có thể đọc một cuốn sách Laravel, đây là một ebook miễn phí , bạn có thể tải xuống.

Cập nhật:OPmuốn mã hóa mật khẩu theo cách thủ công bằng Laravel Hashmà không cần bất kỳ lớp hoặc biểu mẫu nào nên đây là một cách thay thế bằng cách sử dụng artisan tinkertừ dấu nhắc lệnh:

  1. Đi tới dấu nhắc lệnh / thiết bị đầu cuối của bạn
  2. Điều hướng đến Laravelcài đặt (thư mục gốc của dự án của bạn)
  3. Sử dụng cd <directory name>và nhấn enter từ dấu nhắc lệnh / thiết bị đầu cuối
  4. Sau đó viết php artisan tinkervà nhấn enter
  5. Sau đó viết echo Hash::make('somestring');
  6. Bạn sẽ nhận được một mật khẩu được băm trên bảng điều khiển, sao chép nó và sau đó làm bất cứ điều gì bạn muốn.

Cập nhật (Laravel 5.x):

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


Nhưng tôi nên làm điều này ở đâu. Tôi đã xem qua điều này một vài lần.
Graham

Tôi nghĩ rằng tôi đã đặt một câu hỏi sai. Cơ sở dữ liệu của tôi (mà tôi lấy từ người khác) chỉ có mật khẩu băm cho người dùng. Bây giờ tôi muốn tạo một mật khẩu sẽ được băm bởi laravel. Làm cách nào để tạo mật khẩu băm để tôi có thể nhập mật khẩu này vào db.
Graham

Đó là những gì tôi đã trả lời, để tiết kiệm một mật khẩu vào dbbạn cần để mã hóa nó như vậy, từ một mật khẩu đơn giản bạn sẽ mã hóa nó bằng cách sử Hash::make('passwordstring');và sau đó tiết kiệm mật khẩu băm này trong cơ sở dữ liệu.
The Alpha

Nhưng làm thế nào để làm điều này? Nếu tôi chỉ tạo một tệp php chẳng hạn, điều này không hoạt động. Như bạn sẽ hiểu, tôi còn khá mới đối với laravel
Graham

Tôi nghĩ rằng tôi vẫn còn một câu hỏi gây hiểu lầm. Vì tôi hiểu bạn đang nói gì. Nhưng tôi nên sử dụng mã này ở đâu? Trong tập tin nào hoặc ...? Bởi vì tôi sẽ chỉ sử dụng cái này một lần. Nó không phải vì một hình thức nào đó mà tôi có thể thêm một người dùng hoặc một cái gì đó.
Graham

17

Laravel 5 sử dụng bcrypt. Vì vậy, bạn cũng có thể làm điều này.

$hashedpassword = bcrypt('plaintextpassword');

đầu ra mà bạn có thể lưu vào trường mật khẩu của bảng cơ sở dữ liệu của mình.

Tham khảo Fn: bcrypt


Bạn lấy hàm này từ đâu, nó không phải là một phần của PHP hay Laravel?
martinstoeckli

1
@martinstoeckli Oh đó là, nó là một hàm helper trong L5, laravel.com/docs/5.0/hashing#basic-usage
Nagendra Rao

Có vẻ như nó đã được giới thiệu trong Laravel 5.1 laravel.com/docs/5.1/helpers#method-bcrypt
Nagendra Rao

2
@Fusion bcrypt là một thuật toán băm, không phải là một thuật toán mã hóa, với việc băm, bạn không thể lấy lại văn bản thuần túy sau khi băm được tạo cho nó. Đây là toàn bộ điểm của thuật toán băm. Điều duy nhất bạn có thể làm là kiểm tra xem văn bản thuần túy có khớp với hàm băm bạn có hay không.
Nagendra Rao

1
@FreddySidauruk Điều đó sẽ không hoạt động vì bcrypt tạo ra các băm khác nhau mỗi lần, ngay cả khi mật khẩu đầu vào giống nhau. Bạn sẽ phải sử dụng các checkphương pháp: if (Hash::check('secret', $hashedPassword)) { // The passwords match... }Tài liệu tham khảo: laravel.com/docs/5.1/hashing Chỉnh sửa: Đừng quên upvote câu trả lời nếu nó đã giúp bạn;)
Nagendra Rao

11

Mặt tiền Laravel Hash cung cấp phép băm Bcrypt an toàn để lưu trữ mật khẩu người dùng.

Cách sử dụng cơ bản yêu cầu hai điều:

Đầu tiên hãy bao gồm Mặt tiền trong tệp của bạn

use Illuminate\Support\Facades\Hash;

và sử dụng MakePhương pháp để tạo mật khẩu.

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

và khi bạn muốn khớp với chuỗi Hashed, bạn có thể sử dụng mã dưới đây:

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

Bạn có thể tìm hiểu thêm với liên kết tài liệu Laravel bên dưới cho Hashing: https://laravel.com/docs/5.5/hashing


7

Để lưu mật khẩu trong cơ sở dữ liệu, hãy băm mật khẩu và sau đó lưu.

$password = Input::get('password_from_user'); 
$hashed = Hash::make($password); // save $hashed value

Để xác minh mật khẩu, hãy lấy mật khẩu được lưu trữ của tài khoản từ cơ sở dữ liệu

// $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
Tôi yêu câu trả lời này vì nó nói nơi Hash nằm (Illuminate \ Support \ Mặt tiền \ Hash)
shintaroid

6

Nếu bạn muốn hiểu cách hoạt động của exctrl laravel, bạn có thể xem lại toàn bộ lớp học trên Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php

Nhưng về cơ bản có ba phương pháp PHP liên quan đến điều đó:

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

Mật khẩu băm giống với mật khẩu laravel 5.x bcrypt. Không cần cho muối và chi phí, nó sẽ lấy các giá trị mặc định của nó.

Các phương pháp đó đã được triển khai trong lớp laravel, nhưng nếu bạn muốn tìm hiểu thêm, vui lòng xem lại tài liệu chính thức: http://php.net/manual/en/ Chức năng.password-hash.php


Làm. Có thể được sử dụng để đặt lại mật khẩu nếu chỉ có quyền truy cập cơ sở dữ liệu.
air4x

2

Bạn có thể sử dụng như sau:

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

Bạn có thể tham khảo thêm thông tin: tại đây


1

Trong BcryptHasher.php, bạn có thể tìm thấy mã băm:

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

ví dụ: $ trơn-text = 'văn bản'; $ hashed-text = Hash :: make ('text');


Đúng. Đây là cách đúng đắn. Cần sử dụng Illuminate \ Support \ Facades \ Hash. Cảm ơn bạn!
Nole

1

Đây là giải pháp:

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

NB: Sử dụng mã dòng đầu tiên ngay từ đầu trong bộ điều khiển của bạn. Cuối cùng nhưng không kém phần quan trọng, hãy sử dụng hai dòng mã còn lại bên trong chức năng của bộ điều khiển nơi bạn muốn thao tác với dữ liệu sau khi từ được gửi. Chúc bạn viết mã vui vẻ :)


0

So sánh mật khẩu trong laravel và lumen:

Điều này có thể là do hàm bcrypt không hoạt động với php7, sau đó bạn có thể sử dụng mã dưới đây trong laravel và lumen theo yêu cầu của bạn:

use Illuminate\Support\Facades\Hash;

$test = app('hash')->make("test");
if (Hash::check('test', $test)) {
   echo "matched";
} else {
   echo "no matched";
}

Tôi hy vọng, sự giúp đỡ này sẽ làm cho bạn hạnh phúc :)


-5

ok, đây là một giải nén từ hàm make trong hash.php

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

Chỉ cần sao chép / dán nó vào một tệp php và chạy nó.


1
Đây thực sự là thực hành xấu. Trừ khi bạn rất thành thạo về mật mã, bạn chỉ nên sử dụng các hàm băm đã được tạo sẵn.
Nick,
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.