我使用php代码将我的应用程序与localhost连接。我的应用程序注册和登录实际上已经成功,但现在我想在我的密码中添加salt。所以,我按照这个链接:https://www.youtube.com/watch?v=WwxAyiAtrbM在我的应用程序用户密码中实现salt,但是在我添加之后,应用程序无法注册用户。我不知道为什么不能注册。希望得到反馈。下面是我的PHP代码:
<?php
class DbOperations{
private $con;
function __construct(){
require_once dirname(__FILE__).'/DbConnect.php';
$db = new DbConnect();
$this->con = $db->connect();
}
public function encrypt($string, $key){
$string = rtrim(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $string, MCRYPT_MODE_ECB)));
}
public funtion decrypt($string, $key){
$string = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $key, base64_decode($string), MCRYPT_MODE_ECB));
}
public funtion hashword($string, $salt){
$string = crypt($string, '$P$' .$salt . '$');
}
/*CRUD -> C -> CREATE */
public function createUser($user_login, $user_pass,$user_email, $user_registered){
if($this->isUserExist($user_login,$user_email)){
return 0;
}else{
$password = hashword($password, $salt);
$stmt = $this->con->prepare("INSERT INTO `wp_users` (`ID`, `user_login`, `user_pass`,`user_email`,`user_registered`) VALUES (NULL, ?, ?, ?, ?);");
$stmt->bind_param("ssss",$user_login,$user_pass,$user_email,$user_registered);
if($stmt->execute()){
return 1;
}else{
return 2;
}
}
}
public function userLogin($user_login, $user_pass){
$user_pass = md5($user_pass);
$stmt = $this->con->prepare("SELECT ID FROM wp_users WHERE user_login = ? AND user_pass = ?");
$stmt->bind_param("ss",$user_login,$user_pass);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}
public function getUserByUsername($user_login){
$stmt = $this->con->prepare("SELECT * FROM wp_users WHERE user_login = ?");
$stmt->bind_param("s",$user_login);
$stmt->execute();
return $stmt->get_result()->fetch_assoc();
}
private function isUserExist($user_login, $user_email){
$stmt = $this->con->prepare("SELECT ID FROM wp_users WHERE user_login = ? OR user_email = ?");
$stmt->bind_param("ss", $user_login, $user_email);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}
}
?>
答案 0 :(得分:2)
虽然这不是您问题的直接答案,但我强烈建议您重写您的实施以使用password_hash
和password_verify
。这些方法安全,非常非常容易使用。您甚至不需要指定自己的盐,因为让算法为您指定一个更安全!
你像这样使用它
<强>散列强>
$hash = password_hash($raw_user_password);
<强>验证强>
$is_correct_password = password_verify($raw_user_password, $hashed_password_from_db);
请注意,如果使用此方法,则无法以WHERE user_login = ? AND user_pass = ?
格式运行SQL查询。您必须执行WHERE user_login = ?
,获取结果,然后对password_verify
的值运行user_pass
方法。这比您当前的实施安全得多。