Laravelハッシュパスワードを作成する方法


98

Laravelのハッシュパスワードを作成しようとしています。Laravelハッシュヘルパーを使用するように言われましたが、見つからないか、間違った方向を向いています。

Laravelハッシュパスワードを作成するにはどうすればよいですか?そして、どこ?

編集:コードが何であるかは知っていますが、どこでどのように使用するかわからないため、ハッシュ化されたパスワードが返されます。ハッシュ化されたパスワードを取得したら、手動でデータベースに挿入できます


1
Laravelでハッシュ作成して検証する方法を確認してください。
Somnath Muluk 2015年

3
ハッシュ化されたパスワードを手動で作成するためにここにいる人は、以下の答えをphp artisan tinker。で使用できます。例echo Hash::make('yourpassword')
sinaza 2018

回答:


186

でBcryptを使用してパスワードをハッシュするLaravel

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

これにより、ハッシュ化されたパスワードが作成されます。これは、コントローラーまたはモデルで使用できます。たとえば、ユーザーがフォームを使用してパスワードをコントローラーに送信し、POSTメソッドを使用して、次のようにハッシュすることができます。

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

ここに$hashedは、ハッシュ化されたパスワードが含まれます。そう、新しいユーザを登録/作成する際に基本的に、あなたがそれをやる、例えば、ユーザーが送信した場合には、このような、などの詳細nameemailusernameおよびpasswordデータベースにデータを挿入する前に、その後、あなたはハッシュよ、フォームを使用したなどデータを検証した後のパスワード。詳細については、ドキュメントをお読みください

更新:

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

したがって、を$hashedPasswordデータベースに挿入します。希望、それが今明らかだとまだあなたが混乱しているならば、私はあなたが、いくつかのチュートリアルを読んで、いくつかのスクリーンキャストを見てお勧めlaracasts.comtutsplus.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');して暗号化し、このハッシュ化されたパスワードをデータベースに保存します。
アルファ

しかし、どうすればこれを行うことができますか?たとえば、phpファイルを作成した場合、これは機能しません。ご存知のとおり、私はLaravelを初めて使用します
Graham

私はまだ誤解を招く質問があると思います。私はあなたが言っていることを理解しているからです。しかし、このコードはどこで使用すればよいですか?どのファイルまたは...?これは一度だけ使うからです。ユーザーなどを追加できるのは、ある種のフォームではありません。
グラハム

17

Laravel5はを使用しbcryptます。だから、あなたもこれを行うことができます。

$hashedpassword = bcrypt('plaintextpassword');

その出力をデータベーステーブルのパスワードフィールドに保存できます。

Fn Ref:bcrypt


この関数はどこから入手しますか?PHPの一部ではありませんか、Laravelですか?
martinstoeckli 2015

1
@martinstoeckliああ、それはL5のヘルパー関数です。laravel.com/ docs / 5.0 / hashing#basic
Nagendra Rao


2
@Fusion bcryptは、暗号化アルゴリズムではなくハッシュアルゴリズムであり、ハッシュが生成されるとプレーンテキストを取り戻すことはできません。これがハッシュアルゴリズムの要点です。あなたができる唯一のことは、プレーンテキストがあなたが持っているハッシュと一致するかどうかをチェックすることです。
ナゲンドララオ2016

1
@FreddySidauruk入力パスワードが同じであっても、bcryptは毎回異なるハッシュを生成するため、これは機能しません。次のcheck方法を使用する必要があります:if (Hash::check('secret', $hashedPassword)) { // The passwords match... }参照:laravel.com/docs/5.1/hashing編集:答えが役に立った場合は、答えに賛成することを忘れないでください;)
Nagendra Rao

11

Laravel Hashファサードは、ユーザーパスワードを保存するための安全なBcryptハッシュを提供します。

基本的な使用法には2つのことが必要です。

まず、ファイルにファサードを含めます

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 \ Hash)がわかるので、この回答が大好きです
shintaroid 2018年

6

Laravelがどのように機能するかを理解したい場合は、Githubでクラス全体を確認できます:https//github.com/illuminate/hashing/blob/master/BcryptHasher.php

しかし、基本的には3つの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.xbcryptパスワードと同じです。塩とコストを与える必要はありません、それはデフォルト値を取ります。

これらのメソッドは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 = Hash :: make( 'text');


はい。これは正しい方法です。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

注意:コントローラーの最初の行コードを使用してください。大事なことを言い忘れましたが、fromが送信された後、データを操作するコントローラーの関数内の残りの2行のコードを使用します。ハッピーコーディング:)


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
これは本当に悪い習慣です。暗号化に非常に熟練していない限り、組み込みの既製のハッシュ関数を使用する必要があります。
ニック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.