ユーザーパスワードの保護が非常に重要です。この記事では、ハッシュの基礎と、Webアプリケーション内のパスワードを確保する上でのその役割について説明します。 迅速なPHPソリューションを求めている人にとっては、md5()
関数は一般的なオプションではありませんが、一般的です。 md5()
入力の長さに関係なく、一貫して固定長のハッシュを生成し、一方向の性質を強調します。
$data = "Hello World"; $hash = md5($data); echo $hash; // b10a8db164e0754105b7a99be72e3fe5
< ハッシュを使用した典型的なユーザー登録とログインプロセスは次のとおりです。
登録:ユーザーは、パスワードを含む登録の詳細を提供します Webスクリプトは、このデータをデータベースに保存します 重要なことに、パスワードは
ストレージの前にハッシュされます。スクリプトは、データベースから保存されているハッシュされたパスワードを取得します。 比較が行われます。ハッシュが一致した場合にのみアクセスが許可されます。
衝突耐性アルゴリズムがあっても、一般的なパスワードのハッシュを含む事前に計算されたレインボーテーブルとバリエーションは大きな脅威をもたらします。 これらのテーブルは、盗まれたハッシュに対応するパスワードをすばやく表示できます。 3。 塩の緩和:
ハッシュ前にパスワードに「塩」(ランダムな文字列)を追加すると、虹のテーブル攻撃を防ぐのに役立ちます。 ただし、塩がユーザー全体で一貫して盗まれている場合、新しい虹のテーブルを生成し、この保護を無効にすることができます。4。一意の塩:各ユーザーにAユニークなcrc32()
塩(ユーザーIDまたはユーザーのデータに保存されたランダムに生成された文字列)を使用すると、セキュリティが大幅に強化され、効果的なレインボーテーブルを作成することは実用的ではありません。 🎜>
5。ハッシュ速度:高速ハッシュアルゴリズムは、攻撃者が多数のパスワードの組み合わせを試みるブルートフォース攻撃の影響を受けやすくなります。 8文字のパスワードでさえ、強力なハードウェアで比較的迅速にクラックすることができます。
ハッシュ速度の脆弱性の緩和:
より遅いハッシュアルゴリズムまたは調整可能な「コストパラメーター」(blowfishなど)を使用すると、ブルートフォース攻撃に必要な時間が大幅に増加します。 PHPの関数はブローフィッシュをサポートしているため、反復回数を制御できます。
crypt()
$data = "Hello World"; $hash = md5($data); echo $hash; // b10a8db164e0754105b7a99be72e3fe5
安全なパスワードハッシュクラス
このクラスには、議論されたベストプラクティスが組み込まれています:
(php 5.5)function myhash($password, $unique_salt) { return crypt($password, 'a$' . $unique_salt); }
を使用して
PHPの組み込みpassword_hash()
関数は、安全なパスワードハッシュを簡素化します。暗号化された塩を自動的に生成し、アルゴリズムのアップグレードを処理します。
結論password_hash()
class PassHash { private static $algo = 'a'; private static $cost = ''; public static function unique_salt() { return substr(sha1(mt_rand()), 0, 22); } public static function hash($password) { return crypt($password, self::$algo . self::$cost . '$' . self::unique_salt()); } public static function check_password($hash, $password) { $full_salt = substr($hash, 0, 29); $new_hash = crypt($password, $full_salt); return ($hash == $new_hash); } }
以上がハッシュ機能を理解し、パスワードを安全に保つの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。