2017-11-25 103 views
-2

我有一列passwd,我已经使用算法PASSWORD()加密了一列。我想比较用户输入的密码与存储在数据库中的变量 。我想先对另一个变量中的值进行加密并对它们进行比较。我想将mariaDB中加密的值与用户在登录中设置的值进行比较

我更改列如下:

UPDATE customer SET passwd_enc=PASSWORD(passwd); 

我做的登录是这样的:

<?php 
$u = $_REQUEST['username']; 
$p = $_REQUEST['pass']; 

$sql="SELECT * FROM customer WHERE uname=? AND passwd_enc=?"; 
if(! $stmt = $mysqli->prepare($sql)) { 
    echo "Error: " . $mysqli->error; 
}else($stmt = $mysqli->prepare($sql)) { 
    $stmt->bind_param("ss", $u,$p); 
    $stmt->execute(); 
    $result = $stmt->get_result(); 
    $row = $result->fetch_assoc(); 

    if($row['uname']==$u && $row['passwd_enc']==$p) { 
     print "Welcome $u"; 
     $_SESSION['username'] = $u; 

    } else { 
     print "Unknown user"; 
     $_SESSION['username'] = '?'; 
    } 

    if($row['is_admin']==1){ 
     $_SESSION['is_admin']='admin'; 
    }else{ 
     $_SESSION['is_admin']='user'; 
    } 
} 
?> 

事情是这样的:

$p=$_REQUEST['pass']; 
$p_enc=encrypt($p); 
if($p==(encrypted variable in db)) 

注:我想encyption到像PASSWORD()函数那样完成。

+2

你为什么要使用这个而不是'password_hash()'和'password_verify()'? –

+0

请将来更多关注你的语法,拼写和格式。如果您已经使用了四个空格,则不需要使用该符号。 – Tiskolin

+1

@Tiskolin似乎有点苛刻,这是OP的第一个问题...... –

回答

0

如评论建议,您可以使用password_hash()pasword_verify()。 将password_hash($plainTextPassword, PASSWORD_BCRYPT)的结果保存到您的数据库中。然后检查检查它像

$p=$_REQUEST['pass']; 
$p_enc=encrypt($p); 
if($p==(encrypted variable in db)) 

检查它是这样的,而不是:

if (password_verify($_REQUEST['pass'], $encryptedVariableFromDB)){ 
    // Do stuff. 
} 

需要注意的是:

  1. 您不必使用PASSWORD_BCRYPT,我说这表明该参数可用。引述手册:“请注意,这个常数 [即PASSWORD_DEFAULT] 被设计成新的,更强的算法被添加到PHP随时间而改变。”
  2. 请您谈一下在你的答案加密。你其实想要hash the password instead of encrypting it
相关问题