我使用php編寫了一個登錄頁面和一個檢查頁面。在我的本地機器上工作,但在服務器上它不工作(如果它有問題,我在Windows上,服務器在Linux上)。使用哈希進行php密碼檢查不起作用
這是在檢查頁面的代碼:
$user = $_POST['userName'];
$pass = $_POST['pass'];
$saltSQL = 'SELECT salt FROM agents WHERE name="' . $user . '"';
$saltResult = mysql_fetch_array(mysql_query($saltSQL));
$salt = $saltResult['salt'];
$passToCheck = hash('sha512', $salt + $pass);
$rowAgent = mysql_fetch_array(mysql_query('SELECT * FROM agents WHERE name ="' . strtolower($user) . '"'));
if ($rowAgent['password'] != $passToCheck) {
header("location:mainLogin.php");
exit;
}
header("location:selectamount_new.php");
奇怪的是,當我輸入一些字母密碼輸入系統讓我在(不管是什麼),而當我進入只是數字系統將正確地檢查密碼,不會讓我進入(將重定向到mainLogin.php而不是selectamount_new.php)。
再次在我的本地機器上工作得很好,問題是當我用Git將代碼推送到Linux機器(AWS)時。
字符編碼是否在您的本地機器和服務器上相同? –
SHA- *系列不適合散列密碼,因爲算法速度太快。看看函數[password_hash()](http://www.php.net/manual/en/function.password-hash.php)和[password_verify()](http://www.php.net /manual/en/function.password-verify.php)。 – martinstoeckli
@martinstoeckli謝謝!但遺憾的是我目前無法使用它們,我使用PHP 5.3版本的系統工作。幸運的是,這只是暫時的,我們建立一個新的後端,並且PHP版本會更新,所以我將在未來使用它們.. – Nir