So erstellen Sie ein Laravel-Hash-Passwort

94

Ich versuche ein Hash-Passwort für Laravel zu erstellen. Jetzt hat mir jemand gesagt, ich soll den Laravel-Hash-Helfer verwenden, aber ich kann ihn anscheinend nicht finden oder schaue in die falsche Richtung.

Wie erstelle ich ein Laravel-Hash-Passwort? Und wo?

Bearbeiten: Ich weiß, was der Code ist, aber ich weiß nicht, wo und wie ich ihn verwenden soll, damit ich das Hash-Passwort zurück bekomme. Wenn ich das Hash-Passwort erhalte, kann ich es manuell in die Datenbank einfügen

Graham
quelle
1
Überprüfen Sie, wie Sie Hash erstellen und Hash in Laravel überprüfen.
Somnath Muluk
2
Für diejenigen unter Ihnen, die hier sind, um nur manuell ein Hash-Passwort zu erstellen, können Sie die folgende Antwort mit verwenden php artisan tinker. ZBecho Hash::make('yourpassword')
Sinaza

Antworten:

183

Hashing eines Passworts mit Bcrypt in Laravel:

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

Dadurch wird ein Hash-Passwort erstellt. Sie können es in Ihrem Controller oder sogar in einem Modell verwenden. Wenn ein Benutzer beispielsweise ein Kennwort mithilfe eines Formulars mithilfe der POSTMethode an Ihren Controller sendet , können Sie es mit folgender Methode hashen:

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

Hier $hashedwird das Hash-Passwort enthalten. Grundsätzlich werden Sie es tun , wenn die Erstellung / Registrierung eines neuen Benutzers, so zum Beispiel, wenn ein Benutzer sendet Details wie name, email, usernameund passwordusw. ein Formular verwenden, dann bevor Sie fügen die Daten in die Datenbank, werden hash Sie die Passwort nach Validierung der Daten. Weitere Informationen finden Sie in der Dokumentation .

Aktualisieren:

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

Also werden Sie die $hashedPasswordin die Datenbank einfügen . Hoffe, es ist jetzt klar und wenn Sie immer noch verwirrt sind, empfehle ich Ihnen, einige Tutorials zu lesen, einige Screenshots auf laracasts.com und tutsplus.com anzusehen und auch ein Buch darüber zu lesen Laravel. Dies ist ein kostenloses E-Book . Sie können es herunterladen.

Update: Da OPdas Passwort mit Laravel Hashohne Klasse oder Formular manuell verschlüsselt werden soll, ist dies eine alternative Möglichkeit, die artisan tinkerEingabeaufforderung zu verwenden:

  1. Gehen Sie zu Ihrer Eingabeaufforderung / Ihrem Terminal
  2. Navigieren Sie zur LaravelInstallation (Stammverzeichnis Ihres Projekts).
  3. Verwenden Sie cd <directory name>die Eingabetaste / das Terminal und drücken Sie die Eingabetaste
  4. Dann schreiben Sie php artisan tinkerund drücken Sie die Eingabetaste
  5. Dann schreibe echo Hash::make('somestring');
  6. Sie erhalten ein Hash-Passwort auf der Konsole, kopieren es und tun dann, was Sie wollen.

Update (Laravel 5.x):

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

Das Alpha
quelle
Aber wo soll ich das machen? Ich bin ein paar Mal darauf gestoßen.
Graham
Ich glaube, ich habe eine falsche Frage gestellt. Meine Datenbank (die ich von jemand anderem erhalten habe) hat nur Passwörter für Benutzer gehasht. Jetzt möchte ich ein Passwort erstellen, das von Laravel gehasht werden soll. Wie kann ich ein Hash-Passwort erstellen, damit ich dieses in die Datenbank eingeben kann?
Graham
Das habe ich beantwortet. Um ein Passwort zu speichern db, müssen Sie es verschlüsseln. Mit einem einfachen Passwort verschlüsseln Sie es Hash::make('passwordstring');dann und speichern dieses Hash-Passwort in der Datenbank.
Die Alpha
Aber wie mache ich das? Wenn ich nur zum Beispiel eine PHP-Datei erstelle, funktioniert das nicht. Wie Sie verstehen werden, bin ich ziemlich neu in Laravel
Graham
Ich glaube, ich habe immer noch eine irreführende Frage. Weil ich verstehe, was du sagst. Aber wo soll ich diesen Code verwenden? In welcher Datei oder ...? Weil ich das nur einmal benutzen werde. Es ist nicht für irgendeine Form, dass ich einen Benutzer oder etwas hinzufügen kann.
Graham
17

Laravel 5 verwendet bcrypt. Sie können dies also auch tun.

$hashedpassword = bcrypt('plaintextpassword');

Ausgabe, die Sie im Kennwortfeld Ihrer Datenbanktabelle speichern können.

Fn Ref: bcrypt

Nagendra Rao
quelle
Woher bekommen Sie diese Funktion, sie ist nicht Teil von PHP oder Laravel, oder?
Martinstoeckli
1
@martinstoeckli Oh es ist, es ist eine Hilfsfunktion
Nagendra Rao
Sieht aus wie es in der jüngsten Laravel 5.1 laravel.com/docs/5.1/helpers#method-bcrypt
Nagendra Rao
2
@Fusion bcrypt ist ein Hashing-Algorithmus, kein Verschlüsselungsalgorithmus. Mit Hashing können Sie den Klartext nicht zurückerhalten, sobald der Hash dafür generiert wurde. Dies ist der springende Punkt beim Hashing-Algorithmus. Sie können nur überprüfen, ob ein einfacher Text mit Ihrem Hash übereinstimmt.
Nagendra Rao
1
@FreddySidauruk Das funktioniert nicht, da bcrypt jedes Mal einen anderen Hash generiert, selbst wenn das eingegebene Passwort identisch ist. Sie müssen die checkMethode verwenden: if (Hash::check('secret', $hashedPassword)) { // The passwords match... }Ref: laravel.com/docs/5.1/hashing Bearbeiten: Vergessen Sie nicht, die Antwort zu verbessern, wenn es Ihnen geholfen hat;)
Nagendra Rao
11

Die Laravel Hash-Fassade bietet sicheres Bcrypt-Hashing zum Speichern von Benutzerkennwörtern.

Die grundlegende Verwendung erforderte zwei Dinge:

Nehmen Sie zuerst die Fassade in Ihre Datei auf

use Illuminate\Support\Facades\Hash;

und verwenden Sie die MakeMethode, um ein Passwort zu generieren.

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

und wenn Sie mit der Hashed-Zeichenfolge übereinstimmen möchten, können Sie den folgenden Code verwenden:

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

Weitere Informationen finden Sie unter dem folgenden Link zum Laravel-Dokument für Hashing: https://laravel.com/docs/5.5/hashing

Prashant Barve
quelle
7

Um das Passwort in der Datenbank zu speichern, machen Sie einen Hash des Passworts und speichern Sie es.

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

Um das Passwort zu überprüfen, speichern Sie das Passwort des Kontos aus der Datenbank

// $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 
}
Somnath Muluk
quelle
4
Ich liebe diese Antwort, weil sie sagt, wo sich Hash befindet (Illuminate \ Support \ Facades \ Hash)
Shintaroid
6

Wenn Sie verstehen möchten, wie genau Laravel funktioniert, können Sie die gesamte Klasse auf Github überprüfen: https://github.com/illuminate/hashing/blob/master/BcryptHasher.php

Grundsätzlich gibt es jedoch drei PHP-Methoden:

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

Das gehashte Passwort ist dasselbe wie das Verschlüsselungspasswort von laravel 5.x. Sie müssen kein Salz und keine Kosten angeben, sondern nehmen die Standardwerte an.

Diese Methoden wurden in der Laravel-Klasse implementiert. Wenn Sie jedoch mehr erfahren möchten, lesen Sie bitte die offizielle Dokumentation: http://php.net/manual/en/function.password-hash.php

Jathin Prasad
quelle
Funktioniert. Kann zum Zurücksetzen des Kennworts verwendet werden, wenn nur Datenbankzugriff verfügbar ist.
air4x
2

Sie können Folgendes verwenden:

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

Weitere Informationen finden Sie hier

Chris G.
quelle
1

In der BcryptHasher.php finden Sie den Hash-Code:

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;
}
hendra1
quelle
1
use Illuminate\Support\Facades\Hash;
if(Hash::check($plain-text,$hashed-text))
    {
       return true;
    }
    else
    {
        return false;
    }

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

Dharmendra Patel
quelle
Ja. Das ist der richtige Weg. Sie müssen Illuminate \ Support \ Facades \ Hash verwenden. Vielen Dank!
Nole
1

Hier ist die Lösung:

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

NB: Verwenden Sie den Code der ersten Zeile ganz am Anfang Ihres Controllers. Verwenden Sie zu guter Letzt die restlichen zwei Codezeilen in der Funktion Ihres Controllers, in der Sie nach dem Senden des Von Daten bearbeiten möchten. Viel Spaß beim Codieren :)

RashedRahat
quelle
0

Passwort in Laravel und Lumen vergleichen:

Dies kann möglich sein, dass die bcrypt-Funktion mit php7 nicht funktioniert. Dann können Sie den folgenden Code in Laravel und Lumen gemäß Ihren Anforderungen verwenden:

use Illuminate\Support\Facades\Hash;

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

Ich hoffe, diese Hilfe wird dich glücklich machen :)

Kamlesh
quelle
-5

ok, dies ist ein Auszug aus der make-Funktion in 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);

Kopieren Sie es einfach in eine PHP-Datei und führen Sie es aus.

Fabián Valencia
quelle
1
Dies ist wirklich eine schlechte Praxis. Sofern Sie nicht sehr gut mit Kryptografie vertraut sind, sollten Sie einfach die integrierten, bereits erstellten Hashing-Funktionen verwenden.
Nick