通常、ユーザー テーブルを構築するときにソルト フィールドを追加し、パスワードを計算するときに、登録ページに入力されたパスワードとランダムに生成されたソルト値に基づいて MD5 暗号化が実行されるのはなぜですか?誰か詳しい説明をしてくれませんか?
通常、ユーザー テーブルを構築するときにソルト フィールドを追加し、パスワードを計算するときに、登録ページに入力されたパスワードとランダムに生成されたソルト値に基づいて MD5 暗号化が実行されるのはなぜですか?誰か詳しい説明をしてくれませんか?
MD5 で暗号化された弱いパスワードでも、ブルート フォースやレインボー テーブルによって解読される可能性があります。これにより、MD5 解読の難易度が高まり、セキュリティが向上します。
主に、データベースが盗まれた後にユーザーのパスワードを平文で直接取得することを避けるためです。
PHP パスワード ハッシュ セキュリティ
パスワード ハッシュ関連関数:
password_hash (推奨) crypt (blowfish) hash sha1 md5
ハッシュ関数は、sha512 などの複数のハッシュ アルゴリズム hash_algos をサポートします。
パスワード ハッシュと検証を完了するための安全な方法を提供します。
PHP 5.3.7 以降のバージョンは、パスワード ハッシュ API 用の純粋な PHP ネイティブ互換性ライブラリを提供します。 PHP バージョンが、password_hash/password_verify をサポートしていない場合は、代わりに crypt 実装を使用してください。
パスワード検証に crypt() 関数を使用する場合は、タイミング攻撃を避けるために、一定時間かかる文字列比較アルゴリズムを選択する必要があります。消費とは、文字列比較にかかる時間が一定であり、PHP の ==
および === code> 演算子も、入力データの変更によっても変化しないことを意味します。 <code>strcmp()
関数は常に時間のかかる文字列比較を行うものですが、password_verify()
を使用するとその作業を行うことができます
そのため、常にネイティブ パスワード ハッシュ API を使用することをお勧めします。可能です。
暗号化および復号化の分野における「ソルト」とは、ハッシュ処理中に追加される一部のデータを指します。==
和===
操作符和strcmp()
函数都不是耗时恒定的字符串比较,
但是password_verify()
計算されたハッシュ値テーブル (「レインボー テーブル」と呼ばれます) からの出力データの比較を回避するために使用されます。
簡単に言うと、「ソルト」はハッシュ値を解読しにくくするために追加される少量のデータです。
「salt」を追加することで、対応する平文をリストから直接見つけるリスクを回避できます
レインボーテーブルは、一般的に暗号化ハッシュ関数の逆演算用に事前に計算されたテーブルです。暗号化されたパスワード ハッシュを解読するために使用されます。
password_hash()関数はランダムに「salt」を生成します。
password_hash()またはcrypt()関数を使用すると、生成されたハッシュ値の一部として「salt」が返されます。
完全な戻り値を保存できます。この戻り値にはすでに十分な情報が含まれているため、データベースに直接送信されます。
ソルトのもう 1 つの用途は、ユーザーを識別するための Cookie の作成に使用できることです。
たとえば、データベースに基づいてカスタマイズされた Cookie セッション メカニズムを実装するために使用できます。
この Cookie はユーザーを認証するだけでなく、偽造することもできません。ひび割れた。
bcrypt を使用します。PHP 5.5.0 にはデフォルトのアルゴリズムがあります。
なぜMD5を返すのですか?
http://zhuanlan.zhihu.com/p/2...