我挖掘密码并将值插入数据库的方式,
$q = $dbc -> prepare("INSERT INTO accounts (username, email, password, type, gender, joined)
VALUES (?, ?, ?, ?, ?, ?)");
$q -> execute(array($_POST['username'], $_POST['email'],
hash('sha256', $_POST['password'] . date('y/m/d')),
$_POST['type'], $_POST['gender'], date('y/m/d')));
Run Code Online (Sandbox Code Playgroud)
当我像这样比较时,
if ($count == 1
&& $info['password'] === hash('sha256', $_POST['password'].$info['joined'])
&& $info['logcount'] != -1)
Run Code Online (Sandbox Code Playgroud)
两个哈希值都有效但却抛弃了不同的值?我使用完全相同的公式进行创建和比较.
我正在获取用户密码,使用当前日期对其进行盐化,然后散列,两个值都存储在数据库中,并且在完成同样的事情时,所有在线教程都是关于散列和创建安全哈希,而不是比较.
谢谢
什么类型joined?如果它是MySQL并且你正在使用DATE,那么它将打印为"YYYY-MM-DD".你的盐很可能不同.您可能希望使用更简单的方法来加密密码.
可能的解决方案:
创建joined一个字符串(MySQL中的VARCHAR).这有效,但效率较低,不允许您按日期轻松排序/搜索.
在SQL实现使用它时精确匹配日期.例如,对于MySQL,请使用YYYY-MM-DD.另外,请事先创建日期字符串,不要date('y/m/d')在查询中调用两次.预先创建一个带有日期的变量(如"2011-04-21"),将它用于盐,将其传递给joined,并且应该这样做.
使用UNIX_TIMESTAMP将日期转换为数字.没有必要格式化.
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |