5

PHPを学び始めたばかりで、最終学年の大学プロジェクトにログインしてWebサイトを作成したいと思っています。私は、blowfishがここのような多くの場所でハッシュするための最良の方法であることを読みました:openssl_digest vs hash vs hash_hmac?SALTとHMACの違いは?

cryptメソッドについて読んだところには、次のような文字列が含まれています$2y$07$usesomesillystringforsalt$。私の主な質問は、これをランダムに生成するにはどうすればよいですか。タイムスタンプとmt_rand()が安全でない場所を読んだことがあります。

また、最近AESが推奨されるテクノロジーであると聞きましたが、私が見る限り、PHPで実装するのはかなり難しいようです。ブローフィッシュは、保存されているパスワードを保護するための許容可能な方法ですか?

4

3 に答える 3

6

ソルトは(パスワードごとに)一意であり、予測できないものである必要があります。これらの2つの基準は、確定的コンピューターで満たすのが少し難しいため、オペレーティングシステムのランダムなソースを使用して、ソルトを生成することが最善の方法です。

タイムスタンプとmt_rand()関数は、予測可能であると主張できるため、理想的ではありません。少なくとも攻撃者は、特定の期間に考えられる組み合わせを絞り込むことができます(したがって、事前に計算することができます)。これは実際には大きな影響はないかもしれませんが、できる限り最善を尽くしてみませんか?

PHP 5.3以降、この関数を安全に使用しmcrypt_create_iv()てランダムソースから読み取ることができるため、バイナリ文字列を許可されたアルファベットにエンコードする必要があります。これは可能な実装です。

PHP 5.5には独自の関数がpassword_hash()ありpassword_verify()、このタスクを簡素化する準備ができています。PHP 5.3 / 5.4の互換性パックも利用可能で、 password_compatからダウンロードできます。

于 2012-11-26T09:05:34.463 に答える
5

PHPバージョン5.3.7以降の場合、これが最適だと思います。

$blowfish_salt = "$2y$10$".bin2hex(openssl_random_pseudo_bytes(22));

PHPバージョン5.5以降の場合は、自動ソルト作成で新しいpassword_hash() 関数を使用するだけです。

于 2013-07-22T19:01:52.700 に答える
3

Blowfishは今でも受け入れられており、高速ハッシュ方式よりも優先されます。

ソルトのポイントは、事前に計算されたテーブル攻撃を防ぐことです。マイクロタイムのように重要なソルトがある限り、その正確なソルトを使用しなかった事前計算済みのテーブルを阻止しました。

于 2012-11-25T23:32:36.640 に答える