Скрипт входа на PHP с использованием SHA256


Я хочу создать скрипт входа на свой веб-сайт, используя специальное шифрование SHA256 и связанную с ним базу данных mysql. (И форма курса: P)

Я использую плагин Minecraft "Authme" для регистрации. Он хэширует пароль в SHA256 и сохраняет его в базе данных mysql. Но код $SHA$ce9b7692bd2b8f79$644c2a5710bb93f82471d08234435d7d02b1bbc09aff2cf23370f187aab37716 это не то же самое, что хэши SHA256, которые я сделал с некоторых веб-сайтов. 4aae7aba013ffed685a1354a0ebb576b8f1f58997b96cf3ef096282cfe737bff

Разработчики из Authme дали мне "простой" код для расшифровки пароля, но я не знаю, как его подобрать это в моем сценарии.

// @return true if password and nickname match 
function check_password_db($nickname,$password) {
  // Here u have to include your DB connection and select!
  $a=mysql_query("SELECT password FROM authme where username = '$nickname'");
  if(mysql_num_rows($a) == 1 ) {
    $password_info=mysql_fetch_array($a);
    $sha_info = explode("$",$password_info[0]);
  } else 
    return false;
  if( $sha_info[1] === "SHA" ) {
    $salt = $sha_info[2];
    $sha256_password = hash('sha256', $password);
    $sha256_password .= $sha_info[2];;
    if( strcasecmp(trim($sha_info[3]),hash('sha256', $sha256_password) ) == 0 ) 
      return true;
    else return false;
  }
}

Итак, суть в том, что: Я хочу знать, как создать форму, которая регистрирует пользователя на моем веб-сайте, проверяя, правильно ли он ввел пароль, просматривая данные в MySQL. Если вам нужна дополнительная информация, просто ответьте, и я дам вам ее. Моя цель - создать сценарий входа в систему, который работает с сеансами.

У меня есть таблицы ID, am_ (имя пользователя), пароль и ip.

Можете ли вы дать мне что-то вроде кода для этого? (Заполнение формы с именем пользователя и паролем, и посмотрите, действителен он или нет)

Извините за мою опечатку, я родом из Нидерландов..

Author: Dan Lugg, 2013-04-06

3 answers

Ну, из того, что я понимаю: вы используете какую-то библиотеку для регистрации, и теперь вы хотите создать форму входа, которая использует тот же механизм авторизации, который используется при регистрации.

В этом случае вы опубликовали код, который следует использовать для проверки пароля самостоятельно. Просто передайте ему пользовательский ввод и убедитесь, что оператор SELECT использует правильную таблицу и столбцы.

Что касается того, почему хэши различаются, это потому, что пользовательский ввод зашифрован не как sha256(password), а как sha256(concat(sha256(password),salt)), где concat операция объединения строк и соль - это дополнительный ввод , который в данном случае равен части между символами $ (в вашем примере: ce9b7692bd2b8f79).

Кроме того, вы не можете "расшифровать" хэшированные данные. Вы можете только хэшировать некоторые другие данные и сравнивать оба хэша, чтобы проверить, совпадают ли они. Если они одинаковы, то оба входа (вероятно) одинаковы. (Часть "вероятно" связана с тем, что функции хеширования являются сюръекциями, а не биекциями.)

 2
Author: rr-, 2013-04-05 20:55:14

Если вы введете простой пароль в функцию check_password_db, он проверит, равен ли он сохраненному хэшу sha256, поэтому, если эта функция возвращает значение true, вы можете установить переменную сеанса, указывающую, что пользователь успешно вошел в систему.

 0
Author: Miguelo, 2013-04-05 20:50:36

Предоставленный вам код выполняет всю работу за вас. Все, что вам нужно сделать, это передать введенные пользователем данные формы в предоставленную функцию и проверить ее возвращаемое значение, чтобы определить, верны ли данные для входа или нет.

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

Пользователь переходит на страницу входа в систему (login.html)

    <!-- Login Page - login.html -->
    <form name='login-form' action='login.php' method='POST'>
    Username <input type='text' name='username' value=''></input>
    Password <input type='password' name='password' value=''></input>
    <input type='submit' value='Login' name='submit-button'></input>
    </form>

Как только пользователь введет регистрационную информацию и нажмет "Отправить", он должен перейти на страницу вашего PHP-скрипта

<?php
/* Login Script - login.php */

//Enable Session
session_start(); 
//Perform Form Submission Checks

$un = $_POST['username'];
$p = $_POST['password'];

//Validate form input data using PHP and mysql best practices to avoid SQL injections and attacks
//Connect to Database

function check_password_db($nickname, $password)
{
   /* Your Code Here */
}

$return_var = check_password_db($un,$p);

if($return_var == true)
{
    //User entered valid data
    $_SESSION['LOGIN'] = TRUE;
    echo "Login Successful";
}
else
{
    //User entered invalid data
    echo "Login Unsuccessful";
}
?>
 0
Author: GeekByte, 2013-04-08 16:51:23