首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >加密密码后,验证功能不佳。

加密密码后,验证功能不佳。
EN

Stack Overflow用户
提问于 2017-03-30 04:59:18
回答 2查看 94关注 0票数 0

现在我使用这段代码在数据库上加密我的密码,它在登录或验证时起作用。

但它只适用于前7个字符。

假设我的密码是miow12345,但我可以输入miow123或miow12312q.登录

代码语言:javascript
代码运行次数:0
运行
复制
$pas = crypt($_POST["pas"], "MiO1!");  

validation.php

代码语言:javascript
代码运行次数:0
运行
复制
    if(isset($_POST['username']))
{
$username = $_POST['username'];
}
if (isset($_POST['password'])) 
{
$password=crypt($_POST["password"], "MiO1!");
}


$q = 'SELECT * FROM users WHERE username=:username AND password=:password';

$query = $dbh->prepare($q);

$query->execute(array(':username' => $username, ':password' => $password));


if($query->rowCount() == 0)
{
header('Location: login.php?err=1');
}

另一种方法(同样的问题)

代码语言:javascript
代码运行次数:0
运行
复制
if( crypt($_POST["pas"], "TmP2!") != $row["password"])
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-30 07:04:58

PHP的crypt函数只使用前8个字符,即通过设计(http://php.net/manual/en/function.crypt.php)。

在数据库中存储密码时,应该使用password_hash,并使用password_verify将其与用户输入的密码进行比较:

代码语言:javascript
代码运行次数:0
运行
复制
if (password_verify($_POST["pas"], $row["password"]))

(这段代码现在不适用于您,因为您的DB中有crypt-hashed密码,所以您必须使用password_hash重新对其进行散列)

票数 0
EN

Stack Overflow用户

发布于 2017-03-30 05:07:22

问题是,这里的代码是错误的,$password=crypt($_POST["password"], "MiO1!");,它将返回一组不同的字符串。正确使用的是has_equals函数。下面是php文档提供的示例。

代码语言:javascript
代码运行次数:0
运行
复制
if (hash_equals($hashed_password, crypt($user_input, $hashed_password))) {
//your query here;}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43108889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档