這對於檢查我的密碼散列碼,hashing.php登錄問題 - 檢查輸入密碼與mysql中的哈希值?
<?php
//compare password with hashed one
public static function check_password($hash,$password) {
$full_salt=substr($hash,0,29);
$new_hash=crypt($password,$full_salt);
return ($hash==$new_hash);
}
?>
這是login.php中
<?php
require("scripts/hashing.php");
$password=$_POST['txtPassword'];
//checking in database if password exists or not
$checkPassword=mysql_query("SELECT * from $tbl_name WHERE Password='".$password."'");
$resultPassword=mysql_fetch_array($checkPassword);
if(!hashing::check_password($resultPassword['Password'],$password)) {
//back to login
}
?>
的問題是,即使當用戶輸入錯誤的密碼,它允許用戶登錄。
編輯
<?php
class hashing {
//blowfish
private static $algo='$2a';
//cost parameter
private static $cost='$10';
public static function unique_salt() {
return substr(sha1(mt_rand()),0,22);
}
//generate a hash
function myhash($password) {
return crypt($password,self::$algo.self::$cost.'$'.self::unique_salt());
}
//compare password with hashed one
public static function check_password($hash,$password) {
$full_salt=substr($hash,0,29);
$new_hash=crypt($password,$full_salt);
return ($hash==$new_hash);
}
}
?>
死你嘗試只是你return語句之前呼應的結果? echo'hash:「'。$ hash。'」==「'。$ new_hash。'」'; –
如果用戶填寫不在數據庫中的密碼,會發生什麼情況? '$ resultPassword'會是什麼?爲了這個價值,你的'check_password'會做什麼? – Konerak
你的邏輯是有缺陷的。首先從數據庫中獲取所有行,其密碼與您的密碼相同(直接來自POST,而不是加密)。然後你檢查它們是否相等?那麼猜猜看 - 他們是!否則SELECT將無法工作。 – Konerak