-2

登録されたパスワードを sha512 にハッシュする登録システムをセットアップしました。このタイプのハッシュ化されたパスワードでログインする方法がわかりません。ここに私のコードがあります:

<?php

$host="localhost";
$username="root";
$password="";
$db_name="users";
$tbl_name="users";

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");

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

$username = stripslashes($username);
$password = stripslashes($password);
$username = mysql_real_escape_string($username);
$password = mysql_real_escape_string($password);

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

$count=mysql_num_rows($result);

if($count==1){

session_register("username");
session_register("password");
header("location:login_success.php");
}
else {
echo "Wrong Username or Password";
}
?>
4

4 に答える 4

3

これは本当に悪いです:) SQLインジェクションと、代わりにプリペアドステートメントを使用する必要がある理由を読んでください。

自分で書いたコードの使い方を聞くのはおかしい...

文字列を共有すると暗号化されるため、共有されたパスワードがデータベースにある場合、それらを比較することはできません。

ユーザーにパスワードを尋ねる必要があり、それから新しい文字列を作成し、それから sha のものも作成して比較します。何かのようなもの:

get user password from form
shaPass = hash('sha512', $userInputFromForm);
if(shaPass == passwordFromDatabase){
return true;
}else{
return false;

したがって、フォームが必要です。ユーザー名または電子メールアドレスをユーザーに尋ね、選択したものが何であれ、パスワードを尋ねる必要があります。

上記の例 (実際には変更する必要があります) では、前述のように shaPass を作成し、データベースで条件をテストします。

If (usernameFromForm == usernameFromDatabase) && (shaPass == passwordFromDatabase){
login = true;
set session data;
redirect to home page
}else{
error etc}

そこから発想を得ればいい

于 2013-07-22T23:25:41.907 に答える
2
$hashed = hash('sha512', $password);
$sql="SELECT * FROM $tbl_name WHERE username='$username' and password='$hashed'"
于 2013-07-22T23:23:46.113 に答える
1

入力したパスワードをデータベース内のハッシュされたパスワードと比較する必要があります。これを行うには、入力したパスワードもハッシュします。パスワードが有効な場合、ハッシュはデータベースと同じである必要があります。

だから追加するだけ

$password = hash('sha512', $password);

クエリの前。

于 2013-07-22T23:24:22.250 に答える
1

hash() 関数を使用する

$password = hash('sha512', $password);

hash_algos()を使用して sha512 が利用可能かどうかを確認します。

print_r(hash_algos());
于 2013-07-22T23:24:24.257 に答える