Задать вопрос
dalmariko
@dalmariko
Ни рыба ни мясо. Програмясо

Шифрование паролей, или как узнать контрольную сумму для сравнения?

В общем ситуация такая, вот статьяinfo-comp.ru/obucheniest/247-simple-authorization-...
В ней рассматривается авторизация с сессией, которую я хочу реализовать у себя на сайте.
Но я столкнулся с тем что не могу понять как програмисты знают с какой именно контрольной суммой нужно сравнивать их зашифрованный пароль. Я поясню цитатой из статьи.
И давайте сразу же добавим одну запись в эту таблицу:

insert into test.users (user_login, user_password)
values ('mylogin','202cb962ac59075b964b07152d234b70')
Итого у нас получилось:

Логин – mylogin;
Пароль - 202cb962ac59075b964b07152d234b70;
Мы пароль, конечно же, будем хранить в хешированном виде, так как хранить пароль в открытом виде мягко сказать не безопасно. У нас выше хеш пароля 123, поэтому, когда будем вводить пароль в форму, мы будем забивать именно 123, а не 202cb962ac59075b964b07152d234b70.



Вот кусок кода где они определяют контрольну сумму.
// Убираем пробелы и хешируем пароль
$password = md5(trim($_POST['password']));


Так вот я не пойму что: как они пред узнают контрольную сумму да так что ее не видно в коде. Я это к тому что можно же скачать php файлы вместе с сайтом. Внутрь файла заглянуть и увидеть что же мы там хешируем. Например wget -r "название сайта".
Вот как я это вижу. Но я что то похоже не понимаю.
$pass=md5('пароль');
echo $pass;
echo "<br>";
if ($pass==true){echo "Я молодец";
echo "<br>";
} else {echo "я балбес";
echo "<br>";
}


может кто подсказать нормальный пример на php7 потому что там уже по другому реализованно подключение к MySQL
  • Вопрос задан
  • 1685 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 2
эм.. в примере используется md5, он не расшифровывается. Всё что может сделать программист это передать пароль на сервер, где он будет зашифрован так же в md5, а после полученное значение сравнивается с тем которое есть в базе. Если такой логин и зашифрованный пароль есть, то впускают клиента, если нет то сорян.
Однако пример морально устарел, и целесообразней вместо md5 использовать это:
Hashing Функции
Просто используйте PDO для подключения к mysql.
PDO официальная документация
Ответ написан
Комментировать
Рассмотрим логику авторизации на сайте.

В бд хранится хэш-пароль(мд5 - 202cb962ac59075b964b07152d234b70). Когда человек хочет авторизоваться на сайте, он вводит свой нормальный пароль и логин. Тот пароль который он ввел(нормальный) - хэшируют в md5 и сравнивают с тем что в базе. Пример ниже.

В базе есть:
LOGIN — admin
PASS — 4297f44b13955235245b2497399d7a93 (123123)

Человек ввёл на сайте:
LOGIN — admin
PASS — test

Переводим пароль который ввели в MD5(чтобы сравнивать) и получаем:
$login = $_POST['login'];
$pass = md5($_POST['pass']); // $_POST['pass']=test ==> $pass = 098f6bcd4621d373cade4e832627b4f6

Отправляем запрос в базу:
SELECT * FROM `users` WHERE `PASS` = '$pass' AND `LOGIN` = '$login';

Другими словами:
Выбрать из таблицы `users` строки где `PASS` = введенному паролю и `LOGIN` = введенному логину.
Тем самым мы и сравниваем пароль который ввели и тот который в базе.

Если количество строк которые вернет MySQL будет больше 0 - данные верны. Если ничего не вернет(0) - такого аккаунта нет.

Результат: ничего не вернет, такого аккаунта нет ибо такой комбинации логина и пароля в базе нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dalmariko
@dalmariko Автор вопроса
Ни рыба ни мясо. Програмясо
тоесть грубо говоря всю черную работу возложить, в закрытый от потусторонних глаз машинный код?
$pass=md5(trim($_POST['password']));
echo $pass;
echo "<br>";
if ($pass==true){echo "Я молодец";
echo "<br>";
} else {echo "я балбес";
echo "<br>";
}

И пароль и даже хеш сумму видно не будет?. И еще тогда один вопрос с коннектом в БД
<?php
/* Подключение к базе данных ODBC, используя вызов драйвера */
$dsn = 'uri:file:///usr/local/dbconnect';
$user = '';
$password = '';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Подключение не удалось: ' . $e->getMessage();
}

?>

Здесь вводить имя и пароль нужно каждый раз при сессии или можно настроить гдето в php.ini на серваке или сравнивать хеш суммы? подскажите нормальный велосипед.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы