この記事では、主に PHP ユーザーパスワード暗号化アルゴリズムを紹介し、Discuz 暗号化アルゴリズムの原理をより詳細に分析し、.net アルゴリズムの実装方法を例と比較して、PHP でのユーザー暗号化のプロセスと実装方法をまとめます。必要なもの 友達はこれを参照してください
今日、二次開発で Discuz を使用していたとき、コード内の Discuz のユーザー名とパスワードを確認する必要がありました。その結果、Discuz フォーラムには 2 つのテーブルがあるため、誤って罠にはまってしまいました。ユーザー データを保存するには、1 つは Discuz データベース Ultrax の pre_common_member に、もう 1 つは UCenter データベース ucenter の uc_members テーブルに保存されます。私は、ultrax ライブラリの pre_common_member データとそのパスワードがどのように生成されるかを研究するのに多くの時間を費やした結果、インターネット上でランダムに生成されたソルトを見つけました
このランダムに生成されたソルトがどのように使用できるのか疑問に思っていました。 . ログイン時の認証はどうなるのでしょうか?その後、Discuz は実際にはそのパスワードをまったく使用していないとネットで言われました。実際に試してみたところ、pre_common_member のユーザー パスワードを変更しても、引き続き正常にログインできることがわかりました。全く役に立たず、大きく回り道をしてしまいました。
さて、本題に入ります。Discuz のパスワード暗号化アルゴリズムは、実際には 2 つの MD5 暗号化です。まず、平文で 1 回暗号化し、次にランダムにソルトを生成し、最初の暗号文の後に平文としてソルトを追加し、再度 MD5 を実行します。暗号化。ソルトは uc_members テーブルに保存され、ユーザー名によって取得できます。
こんな感じ:
MD5 (MD5(プレーンテキスト) + ソルト)
以下は.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メモリキャッシュ関数memcachedの詳細な画像とテキスト説明
以上がPHP ユーザーパスワード暗号化アルゴリズムの分析例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。