我有这套代码
$user = htmlentities($_POST['user']);
$pass = htmlentities($_POST['pass']);
function sha512($str) { return hash("sha512", $str); }
$pass = sha512($pass);
$tzlogin = sprintf("SELECT * FROM users WHERE user='%s' AND pass='%s'",
mysql_real_escape_string($user), mysql_real_escape_string($pass));
$tzlogged = mysql_query($tzlogin, $config) or die(mysql_error());
if (mysql_num_rows($tzlogged) == 0){
header (sprintf("Location: ./login.php?status=error"));
} else {
if (isset($_POST['tz-remember'])){
$query = mysql_query("SELECT uid FROM users WHERE user='".$user."'", $config);
$id = mysql_fetch_row($query);
foreach($id as $uid){
setcookie('uid', $uid, time() + 60*60*24*30*11, '/', '.localhost');
}
header (sprintf("Location: ./index.php"));
} else {
$query = mysql_query("SELECT uid FROM users WHERE user='".$user."'", $config);
$id = mysql_fetch_row($query);
foreach($id as $uid){
$_SESSION['uid'] = $uid;
}
header (sprintf("Location: ./index.php"));
}
}
我认为这一切都是正确的,因为早些时候我能够正确登录,但突然我不能了,我在注册时将密码加密为哈希格式,再次登录时我首先对其进行加密,然后选择,当我仔细查看插入的数据时数据库中缺少一些行,而输入的数据有点长,就像我输入密码测试一样,现在插入的数据是
“ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732”
虽然发布的数据是
“ee26b0dd4af7e749aa1a8ee3c10ae9923f618980772e473f8819a5d4940e0db27ac185f8a0e1d5f84f88bc887fd67b143732c304cc5fa9ad8e6f57f50028a8ff “为什么会这样?
最佳答案
SHA-512 生成一个 512 位哈希值,可以用 CHAR(128) 表示。
你可以在这里看到其他类型的煞:What data type to use for hashed password field and what length?
关于php无法登录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7940466/