Я использую sha256 для шифрования пароля. Я могу сохранить зашифрованный пароль sha256 в mysql. Но я не могу войти с тем же предложением.
Код вставки:
<?php error_reporting(E_ALL ^ E_NOTICE); $username = $_POST['uusername']; $passcode = $_POST['ppasscode']; $userflag = $_POST['uuserflag']; //$passcodeen = hash('sha256',$passcode); $passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode)); $conn = mysql_connect("localhost","charles","charles") or die("connection failed with DB:".mysql_error()); mysql_select_db("sessiondb"); $query = "INSERT INTO users(username,passcode,userflag) values('$username','$passcodeen','$userflag')";
Выберите код:
<?php error_reporting(E_ALL ^ E_NOTICE); @mysql_connect("localhost","charles","charles") or die("Connection failed".mysql_error()); @mysql_select_db("sessiondb") or die("Database doesn't exist".mysql_error()); //get user input $username = $_POST['username']; $ppasscode = $_POST['ppasscode']; //$passcodeen = hash('sha256', $ppasscode); $passcodeen = hash('sha256', (get_magic_quotes_gpc() ? stripslashes($ppasscode) : $ppasscode)); //get session value from mysql $query = @mysql_query("select username, userflag from users where username ='$username' and passcode = '$passcodeen'") or die("Query execution failed".mysql_error());
Здесь что-то не так? Я очень смущен. Благодарю.
Это может быть опечатка? (два ПП в ppasscode, предназначенные?)
$_POST['ppasscode'];
Я бы позаботился и сделал:
print_r($_POST);
и убедитесь, что данные там точны, а затем повторите то, что должно выглядеть:
echo hash('sha256', $_POST['ppasscode']);
Сравните этот результат с тем, что у вас есть в базе данных (вручную). Делая это, вы исследуете свои возможные моменты отказа:
Прежде всего, sha256 является алгоритмом хеширования, а не типом шифрования. Для шифрования потребовался бы способ дешифрования информации до ее первоначального значения (в случае коллизий).
Глядя на ваш код, кажется, он должен работать, если вы предоставляете правильный параметр.
Сначала попробуйте использовать буквальную строку в вашем коде и проверьте ее достоверность вместо использования переменной $_POST[]
Попробуйте переместить сравнение из запроса базы данных в код (получите хэш для данного пользователя и сравните с хэшем, который вы только что подсчитали)
Но самое главное, прежде чем размещать это в любой публичной моде, пожалуйста, не забудьте очистить свои данные. Не допускайте вставки произвольного SQL-запроса в запросы. Лучшая идея здесь заключалась бы в использовании параметризованных запросов.
Вы должны использовать Adaptive хеширование, например http://en.wikipedia.org/wiki/Bcrypt для защиты паролей
Лучшим решением является просто использовать сценарий превосходной совместимости от Anthony Ferrara:
https://github.com/ircmaxell/password_compat
Пожалуйста, также, при проверке пароля, всегда добавляйте способ (желательно асинхронный, чтобы он не влиял на процесс проверки для timming атак), чтобы обновить хэш, если это необходимо.