Скрипт входа на 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.
Можете ли вы дать мне что-то вроде кода для этого? (Заполнение формы с именем пользователя и паролем, и посмотрите, действителен он или нет)
Извините за мою опечатку, я родом из Нидерландов..
3 answers
Ну, из того, что я понимаю: вы используете какую-то библиотеку для регистрации, и теперь вы хотите создать форму входа, которая использует тот же механизм авторизации, который используется при регистрации.
В этом случае вы опубликовали код, который следует использовать для проверки пароля самостоятельно. Просто передайте ему пользовательский ввод и убедитесь, что оператор SELECT
использует правильную таблицу и столбцы.
Что касается того, почему хэши различаются, это потому, что пользовательский ввод зашифрован не как sha256(password)
, а как sha256(concat(sha256(password),salt))
, где concat операция объединения строк и соль - это дополнительный ввод , который в данном случае равен части между символами $ (в вашем примере: ce9b7692bd2b8f79
).
Кроме того, вы не можете "расшифровать" хэшированные данные. Вы можете только хэшировать некоторые другие данные и сравнивать оба хэша, чтобы проверить, совпадают ли они. Если они одинаковы, то оба входа (вероятно) одинаковы. (Часть "вероятно" связана с тем, что функции хеширования являются сюръекциями, а не биекциями.)
Если вы введете простой пароль в функцию check_password_db, он проверит, равен ли он сохраненному хэшу sha256, поэтому, если эта функция возвращает значение true, вы можете установить переменную сеанса, указывающую, что пользователь успешно вошел в систему.
Предоставленный вам код выполняет всю работу за вас. Все, что вам нужно сделать, это передать введенные пользователем данные формы в предоставленную функцию и проверить ее возвращаемое значение, чтобы определить, верны ли данные для входа или нет.
Вот самый простой вариант использования и код, который поможет вам.
Пользователь переходит на страницу входа в систему (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";
}
?>