Próbuję utworzyć zaszyfrowane hasło do Laravel. Ktoś powiedział mi, żebym użył pomocnika haszującego Laravel, ale nie mogę go znaleźć lub patrzę w złym kierunku.
Jak utworzyć zaszyfrowane hasło laravel? Oraz gdzie?
Edycja: wiem, jaki jest kod, ale nie wiem, gdzie i jak go używać, więc zwraca mi zaszyfrowane hasło. Jeśli otrzymam zaszyfrowane hasło, mogę ręcznie wstawić je do bazy danych
php artisan tinker
. Np.echo Hash::make('yourpassword')
Odpowiedzi:
Haszowanie hasła za pomocą Bcrypt w
Laravel
:$password = Hash::make('yourpassword');
Spowoduje to utworzenie zaszyfrowanego hasła. Możesz go użyć w swoim kontrolerze lub nawet w modelu, na przykład, jeśli użytkownik przesyła hasło za pomocą formularza do kontrolera za pomocą
POST
metody, możesz je zaszyfrować, używając czegoś takiego:$password = Input::get('passwordformfield'); // password is form field $hashed = Hash::make($password);
Tutaj
$hashed
będzie zawierać zaszyfrowane hasło. Zasadniczo, można to zrobić przy tworzeniu / rejestracji nowego użytkownika, tak, na przykład, jeśli użytkownik przedkłada szczegóły, takie jak,name
,email
,username
ipassword
etc za pomocą formularza, a następnie przed tobą wstawić dane do bazy danych, będziesz hash hasło po sprawdzeniu poprawności danych. Aby uzyskać więcej informacji, przeczytaj dokumentację .Aktualizacja:
$password = 'JohnDoe'; $hashedPassword = Hash::make($password); echo $hashedPassword; // $2y$10$jSAr/RwmjhwioDlJErOk9OQEO7huLz9O6Iuf/udyGbHPiTNuB3Iuy
Więc wstawisz
$hashedPassword
do bazy danych. Mam nadzieję, że teraz jest już jasne i jeśli nadal jesteś zdezorientowany, sugeruję przeczytanie kilku samouczków, obejrzenie niektórych rzutów ekranu na laracasts.com i tutsplus.com, a także przeczytanie książkiLaravel
, to jest darmowy ebook , możesz go pobrać.Aktualizacja: Ponieważ
OP
chce ręcznie zaszyfrować hasło za pomocą LaravelHash
bez żadnej klasy lub formularza, jest to alternatywny sposób użyciaartisan tinker
z wiersza poleceń:Laravel
instalacji (katalog główny projektu)cd <directory name>
i naciśnij Enter z wiersza poleceń / terminalaphp artisan tinker
i naciśnij enterecho Hash::make('somestring');
Aktualizacja (Laravel 5.x):
// Also one can use bcrypt $password = bcrypt('JohnDoe');
źródło
db
, musisz je zaszyfrować, więc ze zwykłego hasła zaszyfrujesz je,Hash::make('passwordstring');
a następnie zapiszesz to zaszyfrowane hasło w bazie danych.Laravel 5 używa
bcrypt
. Więc możesz to również zrobić.$hashedpassword = bcrypt('plaintextpassword');
dane wyjściowe można zapisać w polu hasła tabeli bazy danych.
Odniesienie Fn: bcrypt
źródło
check
metody:if (Hash::check('secret', $hashedPassword)) { // The passwords match... }
Ref: laravel.com/docs/5.1/hashing Edycja: Nie zapomnij zagłosować za odpowiedzią, jeśli ci to pomogło;)Fasada Laravel Hash zapewnia bezpieczne mieszanie Bcrypt do przechowywania haseł użytkowników.
Podstawowe użycie wymagało dwóch rzeczy:
Najpierw dołącz fasadę do swojego pliku
use Illuminate\Support\Facades\Hash;
i użyj
Make
metody do wygenerowania hasła.$hashedPassword = Hash::make($request->newPassword);
a kiedy chcesz dopasować haszowany ciąg, możesz użyć poniższego kodu:
Hash::check($request->newPasswordAtLogin, $hashedPassword)
Możesz dowiedzieć się więcej, korzystając z linku do dokumentu Laravel poniżej dotyczącego haszowania: https://laravel.com/docs/5.5/hashing
źródło
Aby przechowywać hasło w bazie danych, utwórz skrót hasła, a następnie zapisz.
$password = Input::get('password_from_user'); $hashed = Hash::make($password); // save $hashed value
Aby zweryfikować hasło, pobierz hasło zapisane do konta z bazy danych
// $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 }
źródło
Jeśli chcesz zrozumieć, jak doskonale działa Laravel, możesz przejrzeć całą klasę na Github: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php
Ale w zasadzie są do tego zaangażowane trzy metody 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 ));
Zaszyfrowane hasło jest takie samo jak hasło laravel 5.x bcrypt. Nie ma potrzeby podawania soli i kosztu, przyjmie wartości domyślne.
Te metody zostały zaimplementowane w klasie laravel, ale jeśli chcesz dowiedzieć się więcej, zapoznaj się z oficjalną dokumentacją: http://php.net/manual/en/function.password-hash.php
źródło
Możesz użyć następujących:
$hashed_password = Hash::make('Your Unhashed Password');
Więcej informacji znajdziesz: tutaj
źródło
W BcryptHasher.php można znaleźć kod skrótu:
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; }
źródło
use Illuminate\Support\Facades\Hash; if(Hash::check($plain-text,$hashed-text)) { return true; } else { return false; }
np. $ zwykły tekst = 'tekst'; $ hashed-text = Hash :: make ('tekst');
źródło
Oto rozwiązanie:
use Illuminate\Support\Facades\Hash; $password = request('password'); // get the value of password field $hashed = Hash::make($password); // encrypt the password
Uwaga: użyj kodu pierwszej linii na samym początku swojego kontrolera. Wreszcie, użyj pozostałych dwóch wierszy kodu wewnątrz funkcji kontrolera, w której chcesz manipulować danymi po przesłaniu from. Miłego kodowania :)
źródło
Porównaj hasło w laravel i lumen:
Może się zdarzyć, że funkcja bcrypt nie będzie działać z php7, wtedy możesz użyć poniższego kodu w laravel i lumen zgodnie ze swoimi wymaganiami:
use Illuminate\Support\Facades\Hash; $test = app('hash')->make("test"); if (Hash::check('test', $test)) { echo "matched"; } else { echo "no matched"; }
Mam nadzieję, że ta pomoc cię uszczęśliwi :)
źródło
ok, to jest wyciąg z funkcji make w 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);
Po prostu skopiuj / wklej go do pliku php i uruchom.
źródło