Як створити хешований пароль laravel


94

Я намагаюся створити хешований пароль для Laravel. Тепер хтось сказав мені використовувати хеш-помічник Laravel, але я, здається, не можу його знайти, або я шукаю в неправильному напрямку.

Як створити хеш-пароль laravel? І де?

Редагувати: я знаю, що таке код, але не знаю, де і як його використовувати, тому він повертає мені хешований пароль. Якщо я отримаю хешований пароль, я можу вручну вставити його в базу даних



2
Для тих, хто тут, щоб просто створити хешований пароль вручну, ви можете використати відповідь нижче з php artisan tinker. Наприклад,echo Hash::make('yourpassword')
sinaza

Відповіді:


184

Хешування пароля за допомогою Bcrypt у Laravel:

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

Це створить хешований пароль. Ви можете використовувати його у своєму контролері або навіть у моделі, наприклад, якщо користувач надсилає пароль за допомогою форми на ваш контролер за допомогою POSTметоду, тоді ви можете хешувати його, використовуючи щось подібне:

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

Тут $hashedміститиме хешований пароль. В принципі, ви будете робити це при створенні / реєстрації нового користувача, тому, наприклад, якщо користувач відправляє деталі , такі як, name, email, usernameі passwordт.д. , використовуючи форму, то перед вставкою даних в базу даних, ви хеширования пароль після перевірки даних. Для отримання додаткової інформації прочитайте документацію .

Оновлення:

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

Отже, ви вставите $hashedPasswordв базу даних. Сподіваюся, зараз це зрозуміло, і якщо ви все ще розгублені, то я пропоную вам прочитати деякі підручники, переглянути деякі трансляції екрану на laracasts.com та tutsplus.com, а також прочитати книгу про Laravel, це безкоштовна електронна книга , ви можете завантажити її.

Оновлення: Оскільки OPхоче вручну зашифрувати пароль за допомогою Laravel Hashбез будь-якого класу або форми, тому це альтернативний спосіб використання artisan tinkerз командного рядка:

  1. Перейдіть до командного рядка / терміналу
  2. Перейдіть до Laravelінсталяції (кореневий каталог вашого проекту)
  3. Використовуйте cd <directory name>та натисніть Enter з командного рядка / терміналу
  4. Потім напишіть php artisan tinkerі натисніть клавішу Enter
  5. Тоді пиши echo Hash::make('somestring');
  6. Ви отримаєте хешований пароль на консолі, скопіюєте його, а потім зробите все, що хочете.

Оновлення (Laravel 5.x):

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


Але де мені це робити. Я стикався з цим кілька разів.
Грем

Думаю, я поставив неправильне запитання. У моїй базі даних (яку я отримав від когось іншого) є лише хешовані паролі для користувачів. Тепер я хочу створити пароль, який повинен хешувати laravel. Як я можу створити хешований пароль, щоб я міг ввести його в базу даних.
Грем

Це те, на що я відповів, щоб зберегти пароль, dbвам потрібно зашифрувати його, тому з простого пароля ви зашифруєте його за допомогою, Hash::make('passwordstring');а потім збережете цей хешований пароль у базі даних.
The Alpha

Але як мені це зробити? Якщо я просто, наприклад, створюю файл php, це не працює. Як ви зрозумієте, я зовсім новачок для laravel
Грем

Я думаю, у мене все ще є оманливе запитання. Бо я розумію, що ви говорите. Але де мені використовувати цей код? В якому файлі чи ...? Тому що я збираюся використати це лише один раз. Це не для якоїсь форми, я можу додати користувача чи щось інше.
Грем

17

Laravel 5 використовує bcrypt. Отже, ви можете зробити і це.

$hashedpassword = bcrypt('plaintextpassword');

вихід, який ви можете зберегти в поле пароля таблиці бази даних.

Fn Ref: bcrypt


Звідки ви берете цю функцію, вона не є частиною PHP чи Laravel, чи не так?
martinstoeckli

1
@martinstoeckli Ой так, це допоміжна функція в L5, laravel.com/docs/5.0/hashing#basic-usage
Rao

Схоже, це було представлено в недавньому Laravel 5.1 laravel.com/docs/5.1/helpers#method-bcrypt
Рао

2
@Fusion bcrypt - це алгоритм хешування, а не алгоритм шифрування, за допомогою хешування ви не можете повернути звичайний текст, коли для нього створено хеш. У цьому вся суть алгоритму хешування. Єдине, що ви можете зробити, це перевірити, чи відповідає звичайний текст вашому хешу.
Nagendra Rao

1
@FreddySidauruk Це не спрацює, оскільки bcrypt щоразу генерує різні хеші, навіть якщо пароль введення однаковий. Вам доведеться скористатися checkметодом: if (Hash::check('secret', $hashedPassword)) { // The passwords match... }Ref: laravel.com/docs/5.1/hashing Edit: Не забудьте проголосувати відповідь, якщо це допомогло вам;)
Nagendra Rao

11

Фасад 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


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

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/en/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 = Хеш :: make ('текст');


Так. Це правильний шлях. Потрібно використовувати Illuminate \ Support \ Facades \ Hash. Дякую!
Ноле

1

Ось рішення:

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

Примітка: Використовуйте код першого рядка на самому початку в контролері. І останнє, але не менш важливе: використовуйте решту два рядки коду всередині функції вашого контролера, де ви хочете маніпулювати даними після подання з. Щасливого кодування :)


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

гаразд, це витяг із функції make у 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);

Просто скопіюйте / вставте його у php-файл та запустіть.


1
Це ДІЙСНО погана практика. Якщо ви не дуже добре володієте криптографією, вам слід просто використовувати вбудовані вже зроблені хеш-функції.
Нік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.