Подтвердить что ты не робот

Как использовать 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());

Есть ли что-то не так? Я очень смущен. Благодарю.

4b9b3361

Ответ 1

Может ли это быть опечатка? (два Ps в ppasscode, предназначенные?)

$_POST['ppasscode'];

Я бы удостоверился и сделаю:

print_r($_POST);

и убедитесь, что данные там точны, а затем повторите то, что должно выглядеть:

echo hash('sha256', $_POST['ppasscode']);

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

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

Ответ 2

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

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

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

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

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

Ответ 4

Лучшим решением является простое использование превосходной совместимости script от Энтони Феррары:

https://github.com/ircmaxell/password_compat

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