1

以前はこれでパスワードをハッシュしていました

$password = hash('sha256' , $salt.$password_arr[$i]);

そして config.php には、パスワードをソルトするためのこのコードがあります

$salt = 'jhfdkjdhfTyhdh3365@jdh69kkshhQAAAiyeg';

そのため、新しいパスを登録するとSQLデータベースにハッシュコードが表示されますが、ログインすると、認証がデータベースデータから直接認証されるため、パスワードが認識されないようです。それで、それを機能させるために私は何ができますか

ログイン確認用のコードは次のとおりです

<?php 
session_start();
include('adminconfig.php');
// username and password sent from form
$username=$_POST['userID'];
$password=$_POST['password'];

// To protect MySQL injection (more detail about MySQL injection)
$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

$sql="SELECT * FROM admin WHERE ID='$username' and
password='$password'";
$result=mysql_query($sql);

$count=mysql_num_rows($result);

if($result && $count==1){
$_SESSION['userID']= $_POST['userID'];
header('location:adminprofile.php');
}
else {
header('location:adminmessage.php');
die;
}
?>
 </body>
 </html>
4

3 に答える 3

1

パスワードが正しいことを確認するには、データベースにパスワードを保存したのと同じ方法でパスワード試行をハッシュする必要があります。ハッシュは一方向関数であるため、ハッシュから「実際の」パスワードを取得することはできません。できることは、新しい値を同じ方法でハッシュし、同じ出力が得られるかどうかを確認することです。この背後にある理論は、同じ出力値を与えるハッシュ関数への入力として与えることができる 2 つの値がないということです。

データベースに保存したのは、ハッシュ(real_password + salt)です。したがって、hash(attempted_pa​​ssword + salt)=database_value かどうかを確認する必要があります。それらが一致する場合、試行されたパスワードは正しいはずであり、ユーザーは認証されています。

PHP にはパスワードのハッシュを処理する機能が組み込まれているため、http: //www.php.net/manual/en/book.password.phpも読むことをお勧めします。

于 2013-08-14T02:23:31.283 に答える
1

私の理解によると、パスワードをハッシュしてデータベースに挿入しています。そのため、実際のパスワードでログインしてデータベースにチェックインしようとすると、一致しません。

これが私の簡単な数学的アナロジーです。

登録時に入力したパスワードは 2 です。ハッシュするときに 3 を追加するとします。したがって、パスワードをハッシュした後は 5.5 がデータベースに挿入されます。

ログイン時にパスワードを 2 として入力します。データベースを確認すると、2 が 5 と一致しないため、ログインに失敗します。

要するに、ログインがフォームから検証された後、パスワードをハッシュしてからデータベースにチェックインすると、機能するはずです。

次の行の間にハッシュ関数を追加します。

$password=mysql_real_escape_string($password);
$password = hash($password , $salt.$password_arr[$i]);
$sql="SELECT * FROM admin WHERE ID='$username' and password='$password'";
于 2013-08-14T02:21:52.470 に答える