重複の可能性:
ユーザー情報とユーザー ログインとパスワードを最適に保存する
方法
私は md5() の使用に慣れていますが、これは時代遅れであり、sha1() も安全ではないと聞いています。では、セキュリティを念頭に置いて、最近データベースにパスワードを保存および取得するための最良の方法は何でしょうか? 小さな例を挙げていただければ幸いです。
ありがとうございました!
重複の可能性:
ユーザー情報とユーザー ログインとパスワードを最適に保存する
方法
私は md5() の使用に慣れていますが、これは時代遅れであり、sha1() も安全ではないと聞いています。では、セキュリティを念頭に置いて、最近データベースにパスワードを保存および取得するための最良の方法は何でしょうか? 小さな例を挙げていただければ幸いです。
ありがとうございました!
ブルートフォース攻撃を防ぐのに役立つので、bcrypt を検討することをお勧めします。http://codahale.com/how-to-safely-store-a-password/
ここで例を見つけることができます
パスワードをハッシュするには、実際にbcryptを使用する必要があります。これは、特にパスワードのハッシュ用に設計されています。
パスワードのハッシュ関数は遅くする必要があります (計算時間が必要です)。SHA-1 や MD5、さらには SHA-256 などのほとんどのハッシュ アルゴリズムは高速になるように設計されていますが、これがブルート フォース攻撃の標的になりやすくなっています。市販の GPU は、毎秒約 8 ギガ MD5 ハッシュを計算できます。
bcrypt を使用することを恐れないでください。高セキュリティ サイト専用ではなく、md5 ハッシュを使用するのと同じくらい簡単に使用できます。phpassのような十分に確立されたライブラリを使用することをお勧めします。実装方法を理解したい場合は、最も重要な点を説明しようとしたこの記事を読むことができます。
アップデート:
現在の PHP バージョンでは、パスワードを処理する関数password_hash()およびpassword_verify()が提供されています。次のように使用します。
// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);
// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
フグで使用crypt
します:
// Hash our password
$hashed = crypt($plain_text_password, '$2a$08$' . substr(hash('whirlpool', microtime()), rand(0, 105), 22));
// Validate a password
if (crypt($plain_text_password, $hashed) == $hashed)) {
// Valid password
}
ソルト プレフィックス$2a$
(ドキュメントを参照) は、crypt
Blowfish の使用を指示するものです。そして、基盤となる OS での の実装がそれをサポートしていると仮定するcrypt(3)
と、「無料で」入手できます。
md5\sha1 + 独自のソルト = 最善の方法
妄想しないでください。
多くの暗号化コードを検索したり、たとえば次のように組み合わせたりできます。
sha1(md5(sha1($pw)));
不要だと思うので、使用するのはSHA512ですhash("sha512",$pw);