Я занимаюсь разработкой функции входа и регистрации для приложения для 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;
}
}
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
}
Других решений пока нет …