0

私はクリプトとフグを使ったシンプルなログインシステムを持っています。しかし、私の人生では、関数がデータベースに保存されている登録済みパスワードを生成しない理由がわかりません。crypt 関数の何が問題になっていますか?

パスワードがデータベースに登録されている場合は次のとおりです。

function unique_md5() {

  mt_srand(microtime(true)*100000 + memory_get_usage(true));

  return md5(uniqid(mt_rand(), true));

}

if ($password == $password_again) {

$md5 = substr(unique_md5(), 0, 15);

$string = '$2a$07$' . $md5;

$password = trim($password);

$protected_password = crypt($password, $string);

//rest of code involved putting that $protected_password into database

ログインページのコード

$password = 'password';

echo '$2a$07$4cf0aa3a82e8d78$$$$$$.M4dWdC3N7OF.hphzfyswwszM7RFJUfu';

//the echo below echos out the exact same thing as the echo above, but the if statement 
//recognizes it as not equal to

echo $registered_password = registered_password($mysqli, $username);

if ($password == crypt($password, $registered_password))

    {

    echo 'Working';

    } else {

    echo 'Not working';

}
4

1 に答える 1

1

関数の使い方がcrypt間違っています。cryptプレーンテキストのパスワードではなく、暗号化されたパスワードを の結果と比較する必要があります。

比較は次のようになります。

if ($encrypted_password_from_database == crypt($user_provided_password, $encrypted_password_from_database)) {
    // match
} else {
    // no match
}
于 2012-09-04T19:18:09.760 に答える