1

アップデート:

で見つかった応答:

http://community.invisionpower.com/tracker/issue-21634-md5-once-password-does-not-decode-html-entities/


フォーラムのクレデンシャルを使用して別のページを作成したいので(私はInvision Power Boardを使用しています)、パスワードがどのように機能するかを調べ始めました。

主にmembersテーブルには、members_pass_hashテーブルとmembers_pass_saltテーブルがあり、暗号化は次のように行われます。

/**
 * Generates a compiled passhash.
 * Returns a new MD5 hash of the supplied salt and MD5 hash of the password
 *
 * @param   string      User's salt (5 random chars)
 * @param   string      User's MD5 hash of their password
 * @return  string      MD5 hash of compiled salted password
 */
static public function generateCompiledPasshash( $salt, $md5_once_password )
{
    return md5( md5( $salt ) . $md5_once_password );
}

その後、ページの作成を開始しますが、何をしても、パスワードがデータベースのパスワードと一致することはありません。

mysqlでdirectを使用してもMD5(CONCAT(MD5(members_pass_salt),MD5('mypass'))、正しい値が得られません...

コミュニティやipbのフォーラムでも検索しましたが、ここで問題になる可能性のあるものを絞り込むことはできません。

パスワードを生成する私のコードは次のとおりです。

$password = $this->input->post('password');
$md5_once_password = md5($password);
$password_hash = md5( md5( $salt ) . $md5_once_password );

$ saltはデータベースから取得され、それが正しいソルトであることを確認するために、それを自分のページにエコーしました。

IPBコードを続けると、次のこともあります。

if ( $member['members_pass_hash'] == self::generateCompiledPasshash( $member['members_pass_salt'], $md5_once_password ) )
{
    return true;
}
else
{
    return false;
}

そして、IPBから投稿した最初のコードに戻ると、パスワードがmembers_pass_hashメンバーテーブルのフィールドと照合されていることを意味します。md5( md5( $salt ) . $md5_once_password )

パスワードが一致しないようにするために私が間違っている可能性があることについてのアイデアはありますか?

どこか何かをエンコードしますか?

テスト用のハッシュを使用した更新:

これは正常に動作します:

salt: Do.|O
password: fsk23478cf
hash: f3f3c75110ea9a27a1c01e580676997f

これは機能しません。理由はまだわかりません。

salt: ppxps
password: fsk23478cf!*
hash saved by the forum: d060c2fb78c5b8a9e9d303c7b4fab456
hash created by my aap: 0df0c7f24f7f79bd7ad8e501f5447986

UPDATE2:

パスワードに問題があることを突き止めましたexclamation markが、それでも何が原因で、どのように解決するのかわかりません。

のパスワードは!正しく一致しません。現在、フォーラムが!私が見つけていない特別なことを行っているかどうかを調べようとしています。私が見つけたのは、パスワードフィールドにトリミングしてから、上記のようにmd5を実行することだけです。 。

4

3 に答える 3

1

に値を指定すると、常に同じ値md5()が出力されることに注意してください。

そうは言っても、両方のアルゴリズムを使用して同じパスワードをチェックすると仮定すると、これら2つのケースではソルトが同一ではないようです。それは1つのチャー、目に見えないチャー、または別の塩の供給源である可能性がありますが、最初のケースの塩は2番目のケースの塩ではないようです。

ディスカッション掲示板にアカウントがあることを確認し、チェックされているパスワードを確認し(関数/メソッドが呼び出されたときにファイルに保存しますか?)、新しく作成した関数に渡すものと比較します。

md5()これは魔法ではなく、同じ値を渡しても動作が異なることはありません。これがハッシュ関数の基本的な基盤です。問題は、に渡す値にありますmd5()

于 2011-11-09T12:24:52.993 に答える
0

パスをトリミングしてみてください。最後に\nまたは他の種類のLFがある場合は、bcsでハッシュが文字列+lfから計算されます。これがお役に立てば幸いです。

于 2011-11-09T12:18:16.257 に答える
0

これに関する長短:

md5ハッシュ用にプレーンテキストのIPBパスワードを準備するときは、最初にhtmlentities()を実行します。

于 2012-08-02T21:02:01.060 に答える