我有一个包含以下列的 MySQL 'users' 表:uname、hash、salt 和 pwd。我正在测试一个 PHP 登录页面,该页面使用此表来获取用户访问权限。我目前还没有系统设置来注册用户,因此通过手动将数据添加到表中进行测试,如下所示.....
uname: 'testuser',
pwd: 'password'
处理检查密码的php函数如下:
function checkPwd($uname, $pwd){
// Get the hash and salt for this user:
$q = "SELECT hash, salt FROM users WHERE uname = '".mysql_real_escape_string($uname)."';";
$res = mysql_query($q) or die("Could not retrieve user login data " . mysql_error());
$tmp = mysql_fetch_assoc($res);
$hash = $tmp['hash'];
$salt = $tmp['salt'];
// Hash and salt $pwd so we can make a comparison:
$hashedInput = sha1($salt . $pwd);
if($hash == $hashedInput) return true; // Return true if the hashed and salted $pwd matches DB entry
return false;
}
它显然不起作用,问题是我并没有真正理解哈希和盐的做事方式。如何使用上述功能测试我的登录页面以确保安全。我必须在盐和哈希字段中输入任何内容吗?