登录表单不读取 sha512
Posted
技术标签:
【中文标题】登录表单不读取 sha512【英文标题】:Login form doesn't read sha512 【发布时间】:2018-01-19 21:33:34 【问题描述】:我在此登录表单中添加了sha512
,但我不断收到错误用户名或密码无效。
我用http://www.convertstring.com/Hash/SHA512在数据库中设置密码
为什么它不起作用?数据库中的密码使用 sha512 + salt 进行哈希处理,但我不断收到用户名/密码不正确的错误。
if(isset($_POST['submit']))
$password1 = ($_POST['password_']);
$salted = "b5vy2m92m9c5my925myic52ddqwm534itkic4m3timcy35".$password1;
$hashed = hash('sha512', $salted);
if(!$_POST['username_'] || !$hashed)
echo '<div class="alert alert-block alert-danger"><button type="button" class="close" data-dismiss="alert"><i class="ace-icon fa fa-times"></i></button>Complete all fields.</div>';
else
$q = Config::$g_con->prepare('SELECT * FROM `users` WHERE `name` = ? AND `password` = ?');
$q->execute(array($_POST['username_'], $hashed));
登录表单
<input type="text" name="username_"/><br/>
<input type="password" name="password_"/><br/>
<input type="submit" name="submit" value="login" class="btn btn-inverse">
总脚本:
if(isset($_SESSION['user'])) echo '<script>
location.replace("'.Config::$_PAGE_URL.'"); </script>'
if(isset($_POST['submit']))
$password1 = ($_POST['password_']);
$salted = "b5vy2m92m9c5my925myic52ddqwm534itkic4m3timcy35".$password1;
$hashed = hash('sha512', $salted);
if(!$_POST['username_'] || !$hashed)
echo '<div class="alert alert-block alert-danger"><button type="button" class="close" data-dismiss="alert"><i class="ace-icon fa fa-times"></i></button>Complete all fields.</div>';
else
$q = Config::$g_con->prepare('SELECT * FROM `users` WHERE `name` = ? AND `password` = ?');
$q->execute(array($_POST['username_'], $hashed));
if($q->rowCount())
$d = Config::$g_con->prepare('SELECT * FROM `panel_restrict` WHERE `PlayerName` = ?');
$d->execute(array($_POST['username_']));
$row1 = $d->fetch(PDO::FETCH_OBJ);
if($d->rowCount() && date("Y-m-d H:i:s") <= gmdate("Y-m-d H:i:s", $row1->Time))
if($row1->Permanent == 1)
$expira = "<b>permanent</b>";
else
$expira = "pana la data de <b>". gmdate("Y-m-d H:i:s", $row1->Time) ."</b>";
echo '<div class="alert alert-block alert-danger">
Contul tau este suspendat '.$expira.'.<br />
Motiv: <b>'.$row1->Reason.'</b><br />
Banat pe data de <b>'.$row1->BanTimeDate.'</b></div>';
else
$dele = Config::$g_con->prepare("DELETE FROM panel_restrict WHERE PlayerName = ?");
$dele->execute(array($_POST['username_']));
$row = $q->fetch(PDO::FETCH_OBJ);
$_SESSION['user'] = $row->id;
echo '<script> location.replace("'.Config::$_PAGE_URL.'"); </script>';
//setcookie ("user",$_POST['username_'],time()+3600*24*60);
//setcookie ("password",$_POST['password_'],time()+3600*24*60);
//header ('Location: ' . $_PAGE_URL);
else echo '<div class="alert alert-block alert-danger"><button type="button" class="close" data-dismiss="alert"><i class="ace-icon fa fa-times"></i></button>Invalid username or password.</div>';
【问题讨论】:
重新开始,然后用户password_hash()
和 password_verify()
阅读手册
数据库中密码的字段类型是什么?
我使用 varchar(256) 作为密码,使用 varchar(64) 作为用户名
如果有人要严格回答您的原始问题,他们需要一份您从该网站收到的哈希值的副本。也就是说,我和@MasivuyeCokile 在一起——我个人会重新考虑你处理密码的整个方法。 password_*() 函数有 3 个巨大的优势:1. 它们为您处理加盐,2. 它们经过了非常好的测试,3. 如果正确实施,随着 php 发布更强大的算法,它们会随着时间的推移而自我更新。最后一点,我会考虑使用比简单的 SHA512 更难计算的东西......(例如,谷歌搜索 bcrypt)。
别再告诉我要使用更好的东西...即使我会 bcrypt 你会说使用更好的东西,请帮我解决这个问题..
【参考方案1】:
停止告诉使用更好的东西...即使我会加密你 会说使用更好的东西,请帮我解决这个问题..
没有。人们告诉你使用 password_hash() 和 password_verify() 是有充分理由的。使用它们。它将为您节省大量工作,更重要的是,它有望阻止您自己实施一个半生不熟的解决方案。您应该不创建自己的盐。事实上,从 PHP 7 开始,它已被弃用。
现在,回答您的问题。当您使用在线工具生成哈希时,您输入了盐。这个在线工具预先将盐添加到您的密码中。 您将附加它到您的密码中。除此之外,我认为 在线工具的情况是大写您的哈希,而 PHP 将其保留为小写。您需要比较相同的情况。
http://sandbox.onlinephpfunctions.com/code/b3801209519783618445a06d31380b24b876fd4c
要说的是,是的,使用 password_hash() 和 password_verify() 让您的生活更轻松。 http://php.net/manual/en/function.password-hash.php
【讨论】:
以上是关于登录表单不读取 sha512的主要内容,如果未能解决你的问题,请参考以下文章
Ionic And Angular 5 表单构建器和组不读取值
Php Login / Mysql 检查 mysql 不适用于 SHA512
CryptoJS 和 Closure 中的 SHA512 不一样