如何使用md5

时间:2018-01-09 10:51:21

标签: php

public function login($email, $password){
    $stmt = $this->pdo->prepare("SELECT 'user_id' FROM 'users' WHERE 'email'=:email AND 'password' = :password");
$stmt->bindParam(":email", $email, PDO::PARAM_STR);
$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);
$stmt->execute();
$user = $stmt->fetch(PDO::FETCH_OBJ);
$count = $stmt->rowCount();

if($count >0){
 $_SESSION['user_id'] = $user->user_id;
 header('Location: home.php');
}else{
 return false;
}
}

在密码中使用md5我收到错误:  只应在第18行的D:\ xammp \ htdocs \ twitter \ core \ classes \ user.php中通过引用传递变量

并且在删除md5时,虽然我在数据库中输入了正确的密码,但我收到了无效密码的错误。

2 个答案:

答案 0 :(得分:2)

使用PHP内置password_hash()功能加密您的密码。

<强> password_hash():

  

使用强大的单向散列算法创建新的密码哈希。

像这样使用它:

$passHash = password_hash("myPassword", PASSWORD_BCRYPT);

注意:

  

PASSWORD_BCRYPT - 使用CRYPT_BLOWFISH算法创建哈希。这将使用“$ 2y $”标识符生成标准的crypt()兼容哈希。结果将始终为60个字符的字符串,或者失败时为FALSE。

参考http://php.net/password-hash

然后改变这一行:

$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);

到此:

$stmt->bindValue(":password", $passHash, PDO::PARAM_STR);

要验证密码,请使用passsword_verify()

<强> passsword_verify():

  

验证给定的哈希值是否与给定的密码匹配。

参考http://php.net/password-verify

像这样使用passsword_verify()

if(password_verify('myPassword', $passHash))
{
    // the password is correct
}
else
{
    // incorrect password
}

答案 1 :(得分:0)

正如@Philipp的评论中所提到的,md5不是加密而不是用于密码 - 但要做你正在尝试的事情,你需要将md5的返回值设置为变量

所以改变

$stmt->bindParam(":password", md5($password), PDO::PARAM_STR);

$md5hash=md5($password);
$stmt->bindParam(":password", $md5hash, PDO::PARAM_STR);