Intereting Posts

Как использовать sha256 в php5.3.0

Я использую 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']); 

Сравните этот результат с тем, что у вас есть в базе данных (вручную). Делая это, вы исследуете свои возможные моменты отказа:

  1. Получение пароля из формы
  2. хеширование пароля
  3. сохраненный пароль
  4. сравнение двух.

Прежде всего, sha256 является алгоритмом хеширования, а не типом шифрования. Для шифрования потребовался бы способ дешифрования информации до ее первоначального значения (в случае коллизий).

Глядя на ваш код, кажется, он должен работать, если вы предоставляете правильный параметр.

  • Сначала попробуйте использовать буквальную строку в вашем коде и проверьте ее достоверность вместо использования переменной $_POST[]

  • Попробуйте переместить сравнение из запроса базы данных в код (получите хэш для данного пользователя и сравните с хэшем, который вы только что подсчитали)

Но самое главное, прежде чем размещать это в любой публичной моде, пожалуйста, не забудьте очистить свои данные. Не допускайте вставки произвольного SQL-запроса в запросы. Лучшая идея здесь заключалась бы в использовании параметризованных запросов.

Вы должны использовать Adaptive хеширование, например http://en.wikipedia.org/wiki/Bcrypt для защиты паролей

Лучшим решением является просто использовать сценарий превосходной совместимости от Anthony Ferrara:

https://github.com/ircmaxell/password_compat

Пожалуйста, также, при проверке пароля, всегда добавляйте способ (желательно асинхронный, чтобы он не влиял на процесс проверки для timming атак), чтобы обновить хэш, если это необходимо.