web-dev-qa-db-ja.com

laravelのBcrypt対ハッシュ

パスワードなどのリンクを(Laravelで)実行するCronのような関数を作成したいのですが。 2つの解決策があります。しかし、どちらを使用するのが良いですか:

オプション1(ハッシュ):

<?php

// Page 1

$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);

// <-- Insert go to page and send GET with $key code here

// Page 2

$salt = "my-random-hash";
$key = hash('sha256', date('Y-m-d').$salt);

if ($key == $pageOneKey) {
    // Execute some code
}

オプション2(bcrypt):

<?php

// Page 1

$key = Crypt::encrypt(date('Y-m-d'));

// <-- Insert go to page and send GET with $key code here

// Page 2

$key = date('Y-m-d');
$pageOneKey = Crypt::decrypt($key);

if ($key == $pageOneKey) {
    // Execute some code
}

このコードは広く説明されています。より良い使用とは、より安全/より安全であること、またはそのトランスの中で何かを意味します。ありがとう!

8
Dees Oomens

2番目のオプションはbcryptではありません。 LaravelのCryptクラスはAES暗号化を使用します。
記載のとおり ドキュメント内

Laravelは、Mcrypt PHP拡張機能を介して、強力なAES暗号化のための機能を提供します。

私が知る限り、暗号化を元に戻すためにデータを復号化する必要はありません。したがって、最初のオプションでは必ずsha256のようなハッシュアルゴリズムを使用する必要があります。ただし、Laravelにはすでに非常に優れたハッシュクラスが付属しているので、それを使用しないでください。

オプション3(Laravel Hash、Bcrypt)

_$hash = Hash::make('secret');

$input = 'secret';
if(Hash::check($input, $hash)){
    // the input matches the secret
}
_

比較にはHash::check()を使用する必要があることに注意してください。 Hash::make()で別のハッシュを作成して比較することはできません。生成されたハッシュにはランダムなコンポーネントが含まれているため、同じシークレットであっても、Hash::make()は毎回異なるハッシュを生成します。

ハッシュ-Laravel docs

11
lukasgeiter

今後の使用のためにキーを復号化する必要がない場合は、最初のオプションの方が適しています。

暗号化した後でキーを取り戻す必要がある場合は、2番目のオプションの方が適しています。

2
user1669496