現在の位置: ホーム> 最新記事一覧> CMSとして暗号化スキームとしてCrypt()を統合します

CMSとして暗号化スキームとしてCrypt()を統合します

M66 2025-05-28

コンテンツ管理システム(CMS)では、ユーザーデータのセキュリティ、特にパスワードのストレージが重要です。 PHPに付属するCrypt()関数は、クラシックで安全なパスワード暗号化方法です。それを合理的に使用すると、システムのセキュリティが大幅に向上する可能性があります。この記事では、パスワードストレージのセキュリティと柔軟性を確保するために、CMSシステムでCrypt()機能を効果的に統合する方法について詳しく説明します。

1。crypt()関数を理解します

Crypt()は、PHPに組み込みの暗号化関数であり、さまざまな暗号化アルゴリズム(DES、BlowFish、SHA-256、SHA-512など)に基づいて実装されています。パスワードハッシュストレージに適した「塩値」パラメーターを渡すことにより、不可逆的な暗号化された文字列を生成します。

 $hashed_password = crypt($password, $salt);

塩の値は、暗号化のセキュリティを確保し、虹のテーブル攻撃を防ぐための鍵です。

2.適切な暗号化アルゴリズムを選択します

crypt()は、次のように形式のさまざまなアルゴリズムをサポートしています。

  • DES (推奨されていない、低セキュリティ)

  • blowfish (識別子$ 2y $ 、最新のパスワードハッシュに推奨)

  • SHA-256 (識別子$ 5 $

  • SHA-512 (識別子$ 6 $

たとえば、blowfishを使用してください。

 $salt = '$2y$12$' . substr(bin2hex(random_bytes(16)), 0, 22);
$hash = crypt($password, $salt);

ここでは、 $ 2Y $がアルゴリズムを表し、 12はコストパラメーター(反復数、値が大きく、より安全ですが、時間がかかります)、22文字の塩が続きます。

3。統合例:ユーザー登録とログインプロセス

登録時にパスワードを暗号化します

function createPasswordHash($password) {
    // ランダム塩を生成します,使用 Blowfish アルゴリズム
    $salt = '$2y$12$' . substr(strtr(base64_encode(random_bytes(16)), '+', '.'), 0, 22);
    // ハッシュを生成します
    return crypt($password, $salt);
}

ユーザーが登録すると、プレーンテキストパスワードは上記の機能を介して生成され、データベースに保存されます。

ログインするときにパスワードを確認します

function verifyPassword($password, $hashedPassword) {
    // 使用 stored hash 暗号化の塩の比較
    return crypt($password, $hashedPassword) === $hashedPassword;
}

ログインするときは、データベースに保存されているハッシュパスワードを取り出し、その塩を使用して入力パスワードをもう一度暗号化し、一致するかどうかを比較して決定します。

4.データベースフィールドを設計します

パスワードフィールドは、blowfishによって生成されたハッシュに対応するために少なくとも60文字の長さで、文字列タイプであることをお勧めします。

 CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash CHAR(60) NOT NULL,
    ...
);

5。予防策と安全の提案

  • 塩をカスタマイズしないでくださいcrypt()で生成された塩形式を使用するか、 password_hash()関数(PHP 5.5+)を使用して操作を簡素化します。

  • パスワードの更新:古いパスワードに弱いアルゴリズムを使用するユーザーを検討し、ログイン時により強い暗号化されたハッシュを再生します。

  • パスワード強度:フロントエンドとバックエンドの強制パスワードの複雑さを組み合わせて、パスワードが弱いことを避けます。

  • プレーンテキストのストレージを避けてください:プレーンテキストパスワードや可逆的な暗号化されたパスワードを保存しないでください。

6.最新のPHPパスワードハッシュAPIの組み合わせ

PHP 5.5から開始すると、 password_hash()およびpassword_verify()は、よりシンプルで安全なパスワード管理インターフェイスを提供し、基礎となるレイヤーもcrypt()に基づいています。最初に新しいプロジェクトを使用することをお勧めします:

 $hash = password_hash($password, PASSWORD_BCRYPT);
$isValid = password_verify($password, $hash);

CMSバージョンが古く、 Crypt()を手動で使用する必要がある場合、上記の方法は依然として安全なソリューションです。