- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
// то проверяем его куки
// вдруг там есть логин и пароль к нашему скрипту
if (isset($_COOKIE['login']) && isset($_COOKIE['password'])) {
// если же такие имеются
// то пробуем авторизовать пользователя по этим логину и паролю
$login = mysql_real_escape_string($_COOKIE['login']);
$password = mysql_real_escape_string($_COOKIE['password']);
// и по аналогии с авторизацией через форму:
// делаем запрос к БД
// и ищем юзера с таким логином и паролем
$query = "SELECT `id`
FROM `users`
WHERE `login`='{$login}' AND `password`='{$password}'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
// если такой пользователь нашелся
if (mysql_num_rows($sql) == 1) {
// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)
$row = mysql_fetch_assoc($sql);
$_SESSION['user_id'] = $row['id'];
авторитизация из кук ну сколько не говори не храни в куках пароли и логины нет найдется один говонокодер которому все не почем и учит детей плохому
операция обращения хеша - по сложности превосходит подбор пароля это раз.
>>>8 латинских буков и цыфер
причем тут это???
MD-5 128 бит - причем там могут быть абсолютно рандомные вещи - это 16 байт.
Хотим цифры и буквы - ОК Base64 увеличивает на 4/3 длину - имеем 16*4/3=64/3~21 символ
а еще есть SHA-256 - который в 2 раза длинней
удачи в подборе 256 бит - для полного перебора может не хватит всей энергии Земли, считай хоть на протонно-фотонно-нейтронных компьютерах
for ($i=0;$i<10;$i++)
if (md5($i)==$hash) {echo "Есть $i"; break;}
вот все пароли от 0 до 10 и ничего сложного
длина кеша роли не играет мы не кеш подбираем а пароль а он врядли длинее 8 -10 символов
))))), вот это труЪ чушь
ага и в нем только цифры от нуля до девяти ))
кстати главный прикол хеша, то что 17 символьный пароль и 3-х символьный могут иметь одинаковый хеш - это называется коллизия
>>>длина кеша роли не играет
))))) реально чушь, хеш и кэш - разные вещи
играет, коллизии
if (md5($i)==$hash) {echo "Есть $i"; break;}
это и есть подбор пароля,
читайте ВНИМАТЕЛЬНО что я написал,
операция обращения хеша - по сложности превосходит подбор пароля.
потому тут именно так - подбирается пароль, а не обращается хеш и это главная фича - мы можем найти другой пароль имеющий такой же хеш
это совершенно правильно, если у Вас в качестве пароля можно использовать только один символ и именно цифру. Обычно же в пароле предлагают алфавитно цифровые символы и например 8 символов (для простоты представим, что в пароле ВСЕГДА 8 символов)
В английском алфавите 28 букв (кажется). Регистр важен, так что 56. Плюс цифры (знаки подчеркивания пока упустим): 66.
Тоесть один символ может иметь до 66 различных значений.
Даже если мы точно знаем, что этих символов восемь, то максимальное число значений 66 в степени 8. Тоесть 360040606269696.
В качестве домашнего задания предлагаю посчитать время, нужное для цикла:
for ($i=0;$i<360040606269697;$i++)
if (md5($i)==$hash) {echo "Есть $i"; break;}
Как видите -- даже в упращенном варианте (с заранее известным кол-вом символов в пароле) это будет не быстро
Что будет, если распараллелить на несколько машин? Я хз, там наверное какие-то нелинейные функции будут.
Мне кажется, их понадобится стока, что легче заплатить наёмникам, которые залезут в нужный офис и выкрадут компьютероы с дисками)
Cуществуют способы брут-форса, которые на обычных компах занимают эпохи, а на квантовых -- секунды.
Ага, допустим, есть 2 + 2 = 4; Как обратить обратно в слагаемые 4? Это может быть 4 + 0. Это может быть 3 + 1. Васька он вроде школьник и студент, ему за такие косяки можно простить.
Разброс у него конечно говененький (мапы на нем лучше не строить), но это хеш, и покажите мне того человека, который мне его обратит. :)))
Думаю, что это не реально.
Возьмем граничный случай:
f(1) = 123
f(2) = 246
Ну и как ту понять -- что такое f?
Нужны достаточно большие выборки, и то не факт, что будетв ерно. Однако вероятность попасть верно куда больше, чем если ничего не делать :)
На гуугле забанили? Хотя я их понимаю...
1.исходная область велика (скажем, натуральные числа), область отображения конечна(скажем, величиной в двойное слово)
2.вычисление прямого отображения эффективно (требуется краткое время)
3.вычисление обратного отображения неэффективно (невозможно теоретически или практически быстро вычислять)
Я не претендавал на стойкость -- просто хотел сказать что это ТОЖЕ хеш.
Так что хеш может быть стойким для программы, прячущей историю Вашей аськи от младшей сестры, но совершенно не стойкий для ФБР или ЦРУ
Посмотрите в википедии "Hash function".
Или посмотрите на функцию hashCode у джававских врапперов для Number: там hash(x) = x :)
Если Вы делаете один скрипт из пяти строк (а PHP был создан именноч то бы делать такие скрипты) то это нормально.
Если Вы делаете серьезное приложение (делать его на php неудбно, но можно) то даже матерые PHPшники стараются его разделять.
но у них это почти никогда не получается
Правда за последние 5 лет ситуация улучшилась: в 2005м году был полный мрак. Теперь хотя бы есть всякие zend, cake итд... Но самые известные php проекты (типа phpbb) все равно являют собой кашу, как и 80% существующих проектов(((