Невозможно войти с паролем шифрования

Я занимаюсь разработкой функции входа и регистрации для приложения для Android. Я проверил много учебников, которые устанавливают пароль как md5, но я хочу более безопасный способ. я использую crypt() вместо md5,

Но я могу только зарегистрироваться и не могу войти в приложение. Как это исправить? Я заменяю линию

$password = md5($pass)

с

$password = crypt($pass)

Ниже приведен код, который я нашел в примере:

class DbOperations{

private $con;

function __construct(){

require_once dirname(__FILE__).'/DbConnect.php';

$db = new DbConnect();

$this->con = $db->connect();

}

/*CRUD -> C -> CREATE */

public function createUser($username, $pass, $email){
if($this->isUserExist($username,$email)){
return 0;
}else{
$password = crypt($pass);
$stmt = $this->con->prepare("INSERT INTO `users` (`id`, `username`, `password`, `email`) VALUES (NULL, ?, ?, ?);");
$stmt->bind_param("sss",$username,$password,$email);

if($stmt->execute()){
return 1;
}else{
return 2;
}
}
}

public function userLogin($username, $pass){
$password = crypt($pass);
$stmt = $this->con->prepare("SELECT id FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss",$username,$password);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}

public function getUserByUsername($username){
$stmt = $this->con->prepare("SELECT * FROM users WHERE username = ?");
$stmt->bind_param("s",$username);
$stmt->execute();
return $stmt->get_result()->fetch_assoc();
}private function isUserExist($username, $email){
$stmt = $this->con->prepare("SELECT id FROM users WHERE username = ? OR email = ?");
$stmt->bind_param("ss", $username, $email);
$stmt->execute();
$stmt->store_result();
return $stmt->num_rows > 0;
}

}

2

Решение

crypt() вернет хешированную строку с отметкой времени, когда вы не добавляете соль.

Вы можете добавить соль, и это сделает хешированную строку одинаковой в любое время.

$password = crypt($pass,"SALT_HERE");

Тем не менее, я предлагаю вам использовать password_hash() скорее, чем crypt() если вы используете PHP 5> = 5.5.0, PHP 7.

Это больше безопасности, чем использование md5() или же crypt(),

Пример:

$input = 'apple';

$hashed = password_hash($input,PASSWORD_DEFAULT);
//return $2y$10$1y2ie2MTlKa44vGqHIT8QeOHRR.BdtVbBj7B9He.4zQpL93cgi4Jm
//that you need to store in somewhere

//Verify the password
if(password_verify($input,$hashed)){
//Password correct

}else{
//Password incorrect

}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector