ホームページ >バックエンド開発 >PHPチュートリアル >PHP データ暗号化方式の詳細な分析

PHP データ暗号化方式の詳細な分析

WBOY
WBOYオリジナル
2016-07-25 08:58:361268ブラウズ
  1. mysql>CREATE TABLE members (
  2. ->gt;ユーザー名 CHAR(14) NOT NULL,
  3. ->パスワード CHAR(32) NOT NULL,
  4. ->PRIMARY KEY(ユーザー名)
  5. ->);
コードをコピー

次に、次のデータがすでにテーブルに格納されていると仮定します。

  1. $enteredPassword.
  2. $salt = substr($enteredPassword, 0, 2);
  3. $userPswd = crypt($enteredPassword, $salt);
  4. // $userPswd はユーザー名とともに MySQL に保存されます
コードをコピー

では、Apache のパスワード応答認証構成を使用して、ユーザーにユーザー名とパスワードの入力を求めます。PHP についてあまり知られていない事実は、Apache のパスワード応答をシステム入力に渡すことができるということです。ユーザーの名前とパスワードは $PHP_AUTH_USER と $PHP_AUTH_PW として識別され、認証スクリプトで使用します。次のコードをよりよく理解するために、時間をかけて以下のスクリプトを注意深く読み、説明にもっと注意を払ってください。 crypt() と Apache のパスワード応答検証システムの応用

  1. $host = "localhost";
  2. $user = "zorro";
  3. $pswd = "hell odolly";
  4. $db = "users";
  5. // 認証を False に設定します
  6. $authorization = 0 ;
  7. // ユーザーがユーザー名とパスワードを入力したことを確認します
  8. if (isset($PHP_AUTH_USER) &&isset($PHP_AUTH_PW)) :
  9. mysql_pconnect($host, $user, $pswd) or die("MySQL に接続できません
  10. サーバー!");
  11. mysql_select_db($db) または die("データベースを選択できません!");
  12. // 暗号化を実行します
  13. $salt = substr($PHP_AUTH_PW, 0, 2);
  14. $encrypted_pswd = crypt( $PHP_AUTH_PW, $salt);
  15. // クエリを構築します
  16. $query = "SELECT username FROM members WHERE
  17. username = '$PHP_AUTH_USER' AND
  18. password = '$encrypted_pswd'";
  19. // クエリを実行します
  20. if (mysql_numrows (mysql_query($query)) == 1) :
  21. $authorization = 1;
  22. endif;
  23. endif;
  24. // 認可を確認
  25. if (! $authorization) :
  26. header('WWW-Authenticate: Basic realm="Private "');
  27. header('HTTP/1.0 401 Unauthorized');
  28. print "このエリアへの立ち入りは許可されていません。";
  29. exit;
  30. else :
  31. print "これは秘密データです!";
  32. endif;
  33. >
コードをコピー

上記は、ユーザーのアクセス権を確認するための簡単な認証システムです。重要な機密情報を保護するために crypt() を使用する場合は、デフォルトで使用される crypt() が最も安全ではなく、より高いセキュリティ要件が必要な場合にのみ使用できることに注意してください。パフォーマンスには、この後で紹介するアルゴリズムが必要です。記事。 次に、PHP━━md5() でサポートされている別の関数を紹介します。この関数は MD5 ハッシュ アルゴリズムを使用します。これには、言及する価値のあるいくつかの興味深い用途があります。

混合 ハッシュ関数は、可変長メッセージを固定長のハッシュ出力 (「メッセージ ダイジェスト」とも呼ばれます) に変換します。これは、固定長の文字列を使用してファイルの整合性をチェックし、デジタル署名とユーザー認証を検証できるため便利です。 PHP に適しているため、PHP の組み込み md5() ハッシュ関数は、可変長メッセージを 128 ビット (32 文字) のメッセージ ダイジェストに変換します。混合エンコーディングの興味深い特徴は、混合結果が元のプレーン コードの内容に依存しないため、混合情報を分析しても元のプレーン コードを取得できないことです。 文字列内の 1 文字だけを変更した場合でも、MD5 ハイブリッド アルゴリズムは 2 つのまったく異なる結果を計算します。まず、次の表の内容とそれに対応する結果を見てみましょう。 md5() を使用して文字列を混合する

  1. $msg = "これは私が今書いたメッセージです";
  2. $enc_msg = md5($msg);
  3. print "ハッシュ: $enc_msg ";
  4. >
コードをコピー
結果: ハッシュ: 81ea092649ca32b5ba375e81d8f4972c 結果の長さは 32 文字であることに注意してください。次の表をもう一度見てください。$msg の値がわずかに変更されています。 md5() を使用して、わずかに変更された文字列をシャッフルする

  1. //メッセージに が 1 つ欠けていることに注意してください
  2. $msg = "これは私が今書いたメッセージです";
  3. $enc_msg = md5($msg);
  4. print "hash2: $enc_msg
  5. " ;
  6. >
コードをコピー

結果: ハッシュ2: e86cf511bd5490d46d5cd61738c82c0c 両方の結果の長さは 32 文字ですが、平文の小さな変更が結果に大きな変更を引き起こすことがわかります。したがって、ハッシュ関数と md5() 関数は、データの小さな変更を確認する良い方法です。のツール。 crypt() と md5() にはそれぞれ用途がありますが、どちらも機能に一定の制限があります。次のセクションでは、PHP ユーザーの暗号化オプションを大幅に拡張する、Mcrypt と Mhash という 2 つの非常に便利な PHP 拡張機能を紹介します。 上記のセクションでは一方向暗号化の重要性について説明しましたが、暗号化後にパスワード データを元のデータに復元する必要がある場合があります。幸いなことに、PHP はこれを Mcrypt 拡張ライブラリの形式で提供します。 マクリプト Mcrypt 2.5.7 Unix | Mcrypt 2.4.7 は強力な暗号化アルゴリズム拡張ライブラリであり、次のアルゴリズムを含む 22 のアルゴリズムが含まれています。 Blowfish RC2 Safer-sk64 xtea キャスト-256 RC4 セーファー-sk128 DES RC4-iv サーペント Enigma Rijndael-128 スリーウェイ Gost Rijndael-192 TripleDES LOKI97 Rijndael-256 トゥーフィッシュ PanamaSaferplus ウェイク 1 2 次のページ 最後のページ



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