パスワードなどのリンクを(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
}
このコードは広く説明されています。より良い使用とは、より安全/より安全であること、またはそのトランスの中で何かを意味します。ありがとう!
2番目のオプションはbcryptではありません。 LaravelのCrypt
クラスはAES暗号化を使用します。
記載のとおり ドキュメント内 :
Laravelは、Mcrypt PHP拡張機能を介して、強力なAES暗号化のための機能を提供します。
私が知る限り、暗号化を元に戻すためにデータを復号化する必要はありません。したがって、最初のオプションでは必ずsha256のようなハッシュアルゴリズムを使用する必要があります。ただし、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()
は毎回異なるハッシュを生成します。
今後の使用のためにキーを復号化する必要がない場合は、最初のオプションの方が適しています。
暗号化した後でキーを取り戻す必要がある場合は、2番目のオプションの方が適しています。