【发布时间】:2012-08-28 23:59:56
【问题描述】:
我已经开始制作一个登录系统并使用 crypt 函数来编码密码。我的问题是,当我用那里的用户名和密码注册用户时,一切正常,并将用户名密码和盐保存到数据库中。 这是注册代码:
注意:目前这只是一个测试注册页面
$username=$_POST["username"];
$password=$_POST["password"];
$salt = substr(md5(microtime()),rand(0,26),15);
$hashedPass = crypt($password,'$2y$10$' . $salt);
$sql="INSERT INTO `users`(`id`, `username`, `password`, `salt`, `Perm_level`) VALUES (NULL,'$username','$hashedPass','$salt','test')";
$result=mysql_query($sql);
它加密它是正确的,所以一个真实的例子是密码测试出来: $2y$10$d395985a2ca993f$$$$$$$.k8lxPkUCenMKsOJ6V8tdO6Pl/Gl1/OW
它的盐用于:
d395985a2ca993f
当我登录时,虽然我将盐从数据库中取出并尝试以相同的方式重新加密它,但我得到一个不同的加密密码......盐是正确的,密码的第一部分也是正确的所以这部分“$2y$10$d395985a2ca993f$$$$$$.”
下面是登录代码:
$sql="SELECT * FROM `users` WHERE username='$user'";
$result=mysql_query($sql);
while($rows=mysql_fetch_array($result)){
$salt=$rows['salt'];
}
$hashedPass = crypt($password,'$2y$10$' . $salt);
$sql="SELECT * FROM `users`WHERE username='$user' AND `password` = '$hashedPass'";
$result=mysql_query($sql);
if($result) {
if(mysql_num_rows($result) == 1) {
echo "Successful Login";
}
}
对于登录页面,盐是正确的,但这是经过哈希处理后的密码: $2y$10$d395985a2ca993f$$$$$$.ccy3PKl.TsG26FWJBFXKmpQ3wtk4AqC
第一部分到句号是正确的,只是后半部分不同
我尝试将盐设置为手动设置,例如 abc 或 123,只是为了测试登录和注册页面,但我仍然遇到同样的错误
【问题讨论】:
标签: php mysql login blowfish crypt