所以我正在创建一个简单的PHP寄存器/登录表单。我创建了一个哈希& salt为密码,但我似乎无法使用正确的密码登录。因为它的散列不正确吗?不要忘记我不是专业人士。
注册码,工作正常,哈希pw&储存盐。
if ($errors === 0) {
$salt = mcrypt_create_iv(32);
$signpassword = DatabaseHelpers::hash($signpassword, $salt);
query("INSERT INTO user_info(Username, Email, Password, Salt) VALUES(:signusername, :email, :signpassword, :salt)",
array('signusername' => $signusername, 'email' => $email, 'signpassword' => $signpassword, 'salt' => $salt),
$conn);
$successstatus = 'You have successfully registered';
}
};
登录代码
$username = $_POST['username'];
$password = $_POST['password'];
function verify($password, $salt) {
hash('sha256', $password . $salt);
}//function for verifying the password, doesn't seem to be working
if (empty($username) || empty($password)) {
$logstatus = 'Please input your username and password';
//update login attempts
} else {
$salts = $conn->prepare('SELECT salt FROM user_info where username=?');
$salts->bindParam(1, $username);
$salts->execute();
$salts = $salts->fetch(PDO::FETCH_ASSOC);
foreach ($salts as $slt) {
$slt = $salt;
}//gets the salt
$hashedpassword = verify($password, $salt);//
$stmt = $conn->prepare('SELECT * FROM user_info where username=? and password=?');
$stmt->bindParam(1, $username);
$stmt->bindParam(2, $hashedpassword);
$stmt->execute();
function start($username, $sessionName){
header( 'Location: logging.php') ;
session_start();
$_SESSION['username'] = $username;
};
if($stmt->rowCount() == 1) {
start($username, $sessionName);
} else {
$logstatus = 'Username or password incorrect.';
}
};};};
当我输入正确的密码时,它总是执行else语句。如果我注释掉散列并从数据库中输入散列的pw,它会让我登录?我知道这可能是一些非常愚蠢但我看不到的东西。有人帮帮我吗?这让我抓狂 - -
------------------好的,请记住,我不是专家。
我使用返回再次测试它,发现两个密码导致两个完全不同的密码。
75642f23ef3c7b35d0a5e223a9c3187d102e77dcc121b5d08c7bbcb44de73e2c 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
我不知道。在这个愚蠢的腌制过程中花了太多时间,只是想学习-_-,猜测我会选择内置的哈希函数,从不从错误中吸取教训,叹息......
是的,并非每个人都拥有PHP 5.5,因此我无法使用这些内置函数。
答案 0 :(得分:4)
您的验证功能实际上并非 DO 。它sha256哈希盐渍/密码,然后简单地扔掉那个哈希。由于函数中没有return
,因此调用代码只会获得NULL
值。
您可能需要以下内容:
function verify($pass, $salt) {
return hash('sha256', $pass . $salt);
^^^^^^----note the return call.
}
if ($hashed_password_from_database == verify($password_from_form, $salt))