Я использую шифрование sha1 для шифрования моего пароля, но я столкнулся с проблемой с этим. Для некоторых пользователей логин не работает.
мой код, (в регистрации)
// all validation is done here
$password = sha1($_POST['password']);
// inserting data is here
в логине мой запрос
$email = $_POST['email'];
$password = sha1($_POST['password']);
select * from users where email = $email and password = $password and status = 1 and deleted = 0;
один из пользователей столкнулся с проблемой с паролем,
им $$ человек
Я делаю что-то неправильно.
Помогите мне, пожалуйста.
Ну, проблема здесь,
Sha1 лечит $man
в im$$man
как переменная, поэтому он будет оцениваться как нулевой, так как у вас нет никакого значения для этого.
что-то вроде этого,
sha1("im$$man");// will echo 17cf5ec2752a9a7f0077c904f60b64f23ba2534d
также равно
sha1("im$");// will echo 17cf5ec2752a9a7f0077c904f60b64f23ba2534d
$man is evaluated to null.
Выход одинаков для обоих входов (хотя вход отличается)
Чтобы получить ожидаемый результат, избегайте двойных кавычек,
sha1('im$$man');// this will give correct output
Выход
850caa44549443778fe005f466766d5d6d413692// correct output.
Аналогичная проблема с md5 () здесь
Я использую шифрование sha1 для шифрования моего пароля,
Нету. SHA1 — это не шифрование, это хеш-функция. Понимание разницы между шифрованием и хэшированием имеет решающее значение для реализации этого безопасно:
password_hash()
а также password_verify()
Кроме того, то, как вы написали свой запрос, заставляет меня полагать, что оно уязвимо для SQL-инъекция.