ホームページ  >  記事  >  バックエンド開発  >  PHPユーザーパスワード暗号化アルゴリズムの分析

PHPユーザーパスワード暗号化アルゴリズムの分析

怪我咯
怪我咯オリジナル
2018-05-28 11:50:313349ブラウズ

一般的な暗号化アルゴリズムは、対称暗号化アルゴリズム、非対称暗号化アルゴリズム、ハッシュ アルゴリズムの 3 つのカテゴリに分類できます。

対称暗号化

は、暗号化と復号化に同じキーを使用する暗号化アルゴリズムを指します。対称暗号化アルゴリズムの利点は、暗号化と復号化が高速であることと、長いキーを使用した場合の解読が困難であることです。 2 人のユーザーが対称暗号化方式を使用してデータを暗号化して交換する必要があると仮定すると、ユーザーは少なくとも 2 つの鍵を必要とし、企業内に n 人のユーザーがいる場合、企業全体で合計 n×(n- 1) キー。キーの生成と配布は、企業の情報部門にとって悪夢になります。対称暗号化アルゴリズムのセキュリティは、暗号化キーの保存に依存しますが、キーを保持する企業内の全員に秘密を保持することを要求することは不可能であり、通常、キーが意図的または非意図的に漏洩します。ユーザーが使用するファイルが侵入者によって取得されると、侵入者はユーザーのキーで暗号化されたすべてのドキュメントを読み取ることができます。企業全体が同じ暗号化キーを共有している場合、企業全体のドキュメントの機密性は問題外になります。

一般的な対称暗号化アルゴリズム: DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6、AES

この記事では主に PHP ユーザー パスワード暗号化アルゴリズムを紹介し、Discuz 暗号化アルゴリズムの原理をより詳細に分析します。また、.net アルゴリズムの実装方法を例の形式で比較し、PHP でのユーザー暗号化のプロセスと実装方法をまとめました。

Discuz のパスワード暗号化アルゴリズムは、実際には 2 つの MD5 暗号化です。平文を暗号化し、ランダムにソルトを生成し、最初の暗号文の後に平文としてソルトを追加し、再度 MD5 暗号化を実行します。ソルトは uc_members テーブルに保存され、ユーザー名によって取得できます。

こんな感じ:

MD5(MD5(plaintext)+salt)

以下は.netの実装コードです:

string GetDiscuzPWString(string sourceStr, string salt)
{
   return GetMd5Hash(string.Concat(GetMd5Hash(sourceStr),salt));
}
string GetMd5Hash(string input)
{
  MD5 md5Hasher = MD5.Create();
  byte[] data = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input));
  StringBuilder sBuilder = new StringBuilder();
  for (int i = 0; i < data.Length; i++)
  {
    sBuilder.Append(data[i].ToString("x2"));
  }
  return sBuilder.ToString();
}

パスワード判定方法をまとめると:

インストール UC

② データベースを開いて uc_members テーブルを見つけ、最後のフィールド「salt」を探し、その中の値をコピーします

③ 疑似コード:

$s=md5(md5("密码")."salt字段的值");
echo $s;

④ IF を使用して判断します

⑤ もう一度言ってください!その乱数は6桁です!

以上がPHPユーザーパスワード暗号化アルゴリズムの分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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