2

Phpassを使用して登録ユーザーのパスワードをハッシュし、データベースに保存しましたが、現在、送信されたユーザー名とパスワードを確認し、ユーザー名がデータベースに存在することを確認し、ハッシュされたパスワードを指定されたものと照合する方法でログインに行き詰まっています。

どんな助けでも大歓迎です!!! ありがとうございました!

これは私のコードです:

<?php

// Inialize session
session_start();

// Include database connection settings
include('config.inc');

require("PasswordHash.php");
$hasher = new PasswordHash(8, false);

$username = $_POST['username'];
$password = $_POST['password'];

// Passwords should never be longer than 72 characters to prevent DoS attacks
if (strlen($password) > 72) { die("Password must be 72 characters or less"); }

$query = "SELECT * FROM user WHERE username = '$username'";

$query = mysql_query($query);
$numrows = mysql_num_rows($query);

if ($numrows = 1) {


$res = mysql_query("SELECT password FROM user WHERE username = '$username'"); 
$row = mysql_fetch_array($res); 
$hash = $row['password']; 
$password = $_POST['password'];

if ($hasher->CheckPassword($password, $hash)) { //$hash is the hash retrieved from the      DB 
        $what = 'Authentication succeeded';
    } else {
        $what = 'Authentication failed';
    }

} else {

 echo "No Such User";
include 'login.php';
exit();
}

echo "$what\n";
echo "<br />";
echo "$hash";

?>

これは、他の人の利益のための私の作業コードです:

<?php

// Inialize session
session_start();

// Include database connection settings
include('config.inc');

require("PasswordHash.php");
$hasher = new PasswordHash(8, false);

$username = $_POST['username'];
$password = $_POST['password'];

// Passwords should never be longer than 72 characters to prevent DoS attacks
if (strlen($password) > 72) { die("Password must be 72 characters or less"); }

$query = "SELECT * FROM user WHERE username = '$username'";

$query = mysql_query($query);
$numrows = mysql_num_rows($query);

if ($numrows = 1) {


$res = mysql_query("SELECT * FROM user WHERE username = '$username'"); 
$row = mysql_fetch_array($res); 
$hash = $row['password']; 
$password = $_POST['password'];

if ($hasher->CheckPassword($password, $hash)) { //$hash is the hash retrieved from the      DB 
        $what = 'Authentication succeeded';
    } else {
        $what = 'Authentication failed';
    }

} else {

 echo "No Such User";
include 'login.php';
exit();
}

echo "$what\n";
echo "<br />";
echo "$hash";

?>
4

1 に答える 1

1

phpassの仕組みは次のとおりです: ユーザーのパスワードを保存するとき (パスワードを作成するとき) は、保存する前に次のようにハッシュします。

$hash_iterations = 30;
$portable_hashes = FALSE;
$hasher = new PasswordHash($hash_iterations, $portable_hashes);
$hash_value = $hasher->HashPassword($actual_password);

$hash_value次に、ユーザーのパスワードとしてデータベースに保存します。ユーザーを検証するときは、ユーザー名でユーザーを検索します。見つかった場合は、データベースからの実際のパスワード (格納されたハッシュ) とユーザーが入力したもののハッシュを比較します。

// $stored_hash is the value you saved in the database for this user's password
// $user_input is the POST data from the user with the actual password
$valid_password = $hasher->CheckPassword($user_input, $stored_hash);

PasswordHashと に同じ値を使用して、毎回同じ方法でクラスを初期化するようにしてください。そうしない$hash_iterations$portable_hashes、比較が正しく機能しません。

于 2012-09-05T01:50:49.140 に答える