我有一個註冊頁面,允許用戶插入密碼。我在註冊時散列密碼,以便它更安全地存儲在數據庫中。註冊密碼與登錄密碼不同
當用戶使用相同的密碼登錄,這兩個散列不匹配,而且用戶無法登錄
這是使用哈希我的第一次,並沒有表現得如我所料:
這是註冊頁面上的散列碼:
$salt ="";
function cryptPass($input, $rounds = 9)
{
$salt = "";
$saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
for($i = 0; $i<22; $i++)
{
$salt .=$saltChars[array_rand($saltChars)];
}
return crypt($input, sprintf('$2y$%02d$test$', $rounds) . $salt);
}
$hashedpass = cryptPass($pass1);
echo $hashedpass;
//************Insert all the members's input to the database**************************//
$query = mysql_query("INSERT INTO members(user_name, first_name, last_name, governorate, district, village, birth_date, email_address, specialization, password, salt, registered_date)VALUES('$username', '$firstname', '$lastname', '$governorate', '$district', '$village', '$bdate', '$email', '$specialization', '$hashedpass', '$salt', now())")or die(mysql_error());
我沒有加入鹽,但它給空
這是登錄頁面
function cryptPass($input, $rounds = 9)
{
$salt = "";
$saltChars = array_merge(range('A','Z'), range('a','z'), range('0','9'));
for($i = 0; $i<22; $i++)
{
$salt .=$saltChars[array_rand($saltChars)];
}
return crypt($input, sprintf('$2y$%02d$test$', $rounds) . $salt);
}
$hashedpass = cryptPass($pass);
echo $hashedpass;
$sql=mysql_query("SELECT user_id, email_address, first_name, user_name FROM members WHERE email_address='$email'AND password= '$hashedpass' LIMIT 1") or die("error in members table");
$login_check = mysql_num_rows($sql);
if($login_check > 0)the hashing password = $2y$09$test$4ZGgCiXdKzgQvuzwu.AxfdWvZadDCE.LD6HCkrK3ZsqJeN7e
所以在我的例子中它應該是什麼代碼,因爲它沒有工作,因爲它應該 – user2398286
當用戶註冊時,你生成一個鹽,並用它散列密碼。然後將這兩個密碼保存到數據庫中。當用戶嘗試登錄時,首先要做的是獲取用戶的信息。一旦你有了他的鹽,你可以用數據庫中的salt來散列用戶輸入的密碼。然後,您可以將生成的哈希與數據庫中的哈希進行比較。 – Ahatius
問題是我不明白你的意思是通過獲取用戶的鹽(在代碼中我不知道該寫什麼) – user2398286