現在の位置: ホーム> 最新記事一覧> crypt()とpassword_hash()の違いは何ですか?

crypt()とpassword_hash()の違いは何ですか?

M66 2025-05-20

PHPでパスワード暗号化を扱う場合、 Crypt()およびPassword_Hash()を使用してパスワードのハッシュ値を生成できますが、これら2つの機能には明らかな違いがあります。暗号化機能を選択するとき、アプリケーションのセキュリティを確保するためには、それぞれの原則と利点を理解することが重要です。

1。crypt ()関数の概要

Crypt()は、UNIXシステムにまでさかのぼることができる長年の暗号化関数です。提供する塩値とシステムでサポートされているアルゴリズムに応じて、さまざまな暗号化アルゴリズム(DES、MD5、SHA-256、SHA-512など)をサポートします。

例:

 $password = 'mySecretPassword';
$salt = '$6$rounds=5000$anexamplesaltstring$'; // 使用 SHA-512
$hash = crypt($password, $salt);

生成された$ハッシュは、提供された塩形式に基づいて暗号化アルゴリズムを選択します。この例では、SHA-512が使用されます。

2。password_hash ()関数の概要

Password_hash()は、PHP 5.5以降に導入された最新のパスワードハッシュ関数です。デフォルトでBCRyptアルゴリズムを使用し、新しいバージョン(PHP 7.2以降)でArgon2iArgon2IDもサポートします。パスワードハッシュ用に設計されており、塩の値とコスト要因を自動的に管理し、安全なコーディングの取り組みを大幅に簡素化します。

例:

 $password = 'mySecretPassword';
$hash = password_hash($password, PASSWORD_DEFAULT); // デフォルトで使用されます bcrypt

生成された$ハッシュは、開発者による手動設定を必要とせずに、アルゴリズム情報、コスト、塩を含む文字列です。

3。コア差の比較

特性crypt() password_hash()
塩の価値管理開発者が手動でセットアップする必要があります自動的に生成します
アルゴリズムさまざまな、指定する必要がありますデフォルトのbcryptはArgon2をサポートしています
安全実装と構成に依存しますデフォルトでは、ベストプラクティスに従ってください
使いやすさ複雑なエラーが発生しやすいシンプルで使いやすい
推奨程度新しいプロジェクトにはお勧めしません強くお勧めします

4. Password_hash()を選択する方が適切なのはなぜですか?

?より強力なセキュリティ

Password_hash()で使用されるアルゴリズムは、パスワード( BCRYPTArgon2など)のハッシュ用に設計されており、GPU加速攻撃などの最新のパスワードクラッキングテクノロジーに抵抗できます。

?より高いメンテナビリティ

Password_Default定数を使用して、PHPはコードを変更せずにより安全なアルゴリズムに自動的に切り替えることができます。例えば:

 $hash = password_hash($password, PASSWORD_DEFAULT);

PHPの更新により、 Password_DefaultはBcryptからArgon2IDへの切り替えなど、より強力なアルゴリズムを自動的に採用します。

?エラーが少ない

password_hash()は塩の値とコスト要因を自動的に処理するため、人間のセットアップエラーによって引き起こされるセキュリティの問題を大幅に削減します。

5。URL関連のアプリケーションシナリオ

たとえば、ユーザー認証システムを構築している場合、次の形式の登録処理スクリプト:

 if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $password = $_POST['password'];
    $hash = password_hash($password, PASSWORD_DEFAULT);

    // データベースに保存します
    $conn = new PDO('mysql:host=localhost;dbname=example', 'user', 'pass');
    $stmt = $conn->prepare('INSERT INTO users (username, password) VALUES (?, ?)');
    $stmt->execute([$_POST['username'], $hash]);

    header('Location: https://m66.net/login-success');
}

この場合、 Password_hash()を使用することは大幅に安全でモダンであり、システムのセキュリティと保守性を長時間維持できます。

結論は

Crypt()はまだ使用可能ですが、 Password_hash()は、セキュリティ、使いやすさ、将来の保守性の観点からより適切な選択肢です。特に、ユーザーのパスワードが処理されるシナリオでは、 password_hash()をpassword_verify()で使用して、ユーザー入力を検証し、より安全なPHPアプリケーションを作成する必要があります。