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
  • Вопрос задан
  • 1573 просмотра
Решения вопроса 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 на серваке или сравнивать хеш суммы? подскажите нормальный велосипед.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽