ホームページ >バックエンド開発 >PHPチュートリアル >PHP でパスワードを安全に暗号化および復号化するにはどうすればよいですか?

PHP でパスワードを安全に暗号化および復号化するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-10 21:32:10753ブラウズ

How Can I Securely Encrypt and Decrypt Passwords in PHP?

双方向暗号化: 取得可能なパスワードの保存

暗号化と復号化

暗号化と復号化PHP でパスワードを復号化し、暗号化クラスを利用します。キーストレッチ、IV 隠蔽、HMAC 検証、その他のセキュリティ対策をカプセル化します。クラス実装の例が提供されています。

class Encryption {
    // Cipher and mode used for encryption
    private $cipher;
    private $mode;

    // Constructor (usage example)
    public function __construct($cipher = MCRYPT_BLOWFISH, $mode = MCRYPT_MODE_CBC) {
        $this->cipher = $cipher;
        $this->mode = $mode;
    }

    // Encrypts data
    public function encrypt($data, string $key): string {
        // ...
    }

    // Decrypts data
    public function decrypt($data, string $key): string {
        // ...
    }
}

最も安全なアルゴリズムの選択

最も安全な暗号化方式は、ブロック サイズが 8 バイトの MCRYPT_BLOWFISH および MCRYPT_RIJNDAEL_128 です。 MCRYPT_MODE_CBC

秘密キーのストレージ

セキュリティを強化するには、ユーザー用、アプリケーション用、ユーザー固有のソルト用に 1 つずつ、複数のキーを使用することを検討してください。 。アプリケーション固有のキーを Web ルートとは別に安全に保管します。ユーザー固有のキーを暗号化されたパスワードとともにデータベースに保存します。パスワードを復号化する必要がある場合、ユーザーに秘密キーの入力を要求します。

パスワード侵害の防止

パスワードの盗難を軽減するには、システム侵害から保護する厳格なセキュリティ対策を実装してください。 MITM 攻撃、および HTTP トラフィック スニッフィング。すべてのトラフィックに SSL を使用し、サーバー上の脆弱性を排除します。

暗号化に関する追加の考慮事項

  • 暗号化データ サイズ: 暗号化されたデータサイズはプレーン テキストの長さに応じて異なり、オーバーヘッドの範囲は約 80 ~ 87 です。
  • 復号化時間: サンプル クラスを使用した復号化には、平均で約 0.5 秒かかります。
  • 代替キー拡張方法: PBKDF2 派生内でキーを実行するのではなく、キーをストレッチする別の関数。

以上がPHP でパスワードを安全に暗号化および復号化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。