HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Хранить пароли пользователей в открытом виде в БД - не самый лучший вариант, особенно когда к этой базе данных могут получить доступ другие. И, правда, при взломе базы пароли пользователей, хранящиеся в открытом виде, будут банально украдены, а это уже чревато серьёзными репутационными и финансовыми потерями, чего не может допустить никакой системный администратор.</p>
1 <p>Хранить пароли пользователей в открытом виде в БД - не самый лучший вариант, особенно когда к этой базе данных могут получить доступ другие. И, правда, при взломе базы пароли пользователей, хранящиеся в открытом виде, будут банально украдены, а это уже чревато серьёзными репутационными и финансовыми потерями, чего не может допустить никакой системный администратор.</p>
2 <p>В этой статье будет рассмотрен процесс хэширования паролей (hashing) - процесс несложный, но, к сожалению, порой игнорируемый веб-программистами.</p>
2 <p>В этой статье будет рассмотрен процесс хэширования паролей (hashing) - процесс несложный, но, к сожалению, порой игнорируемый веб-программистами.</p>
3 <p>Да, хэширование панацеей не является, но всё же при краже данных оно может существенно снизить ущерб. Ведь что собой представляет хэш-функция (hash, хэш, хеш)? Речь идёт о функции, которая обладает бесконечной областью определения, имея при этом конечную область значения. А ещё функции типа hash присуща одна интересная особенность: даже в случае небольшого изменения входного значения у хэш-функции, итоговое значение изменится просто радикально. Если говорить языком криптографию, стоит отметить главное назначение хэш-функций - генерация ключей на основе запоминаемых и коротких паролей (лично вам, легко ли было бы запомнить 16 шестнадцатеричных разрядов?) То-то же.</p>
3 <p>Да, хэширование панацеей не является, но всё же при краже данных оно может существенно снизить ущерб. Ведь что собой представляет хэш-функция (hash, хэш, хеш)? Речь идёт о функции, которая обладает бесконечной областью определения, имея при этом конечную область значения. А ещё функции типа hash присуща одна интересная особенность: даже в случае небольшого изменения входного значения у хэш-функции, итоговое значение изменится просто радикально. Если говорить языком криптографию, стоит отметить главное назначение хэш-функций - генерация ключей на основе запоминаемых и коротких паролей (лично вам, легко ли было бы запомнить 16 шестнадцатеричных разрядов?) То-то же.</p>
4 <p>Подытожив первую часть статьи, скажем, что<strong>hash генерирует хэш-код</strong>.</p>
4 <p>Подытожив первую часть статьи, скажем, что<strong>hash генерирует хэш-код</strong>.</p>
5 <h2>Описание hash в PHP</h2>
5 <h2>Описание hash в PHP</h2>
6 <p>Описать хэш (хеш) в PHP можно следующим образом:</p>
6 <p>Описать хэш (хеш) в PHP можно следующим образом:</p>
7 hash ( string $algo , string $data [, bool $raw_output = FALSE ] ) : string<p>Теперь стоит рассказать про список параметров функций типа hash (хеш, хэш): •<strong>algo</strong>. Тут прописывается название алгоритма, выбранного для хэширования (тот же md5 или SHA-1). Существует целый список поддерживаемых алгоритмов, найти который не составляет труда; •<strong>data</strong>. Сообщение для хэширования. Без комментариев; •<strong>raw_output</strong>. Если этот параметр установлен в режим TRUE, то осуществляется вывод необработанных двоичных данных. Если же выставить его в FALSE, производится вывод данных в шестнадцатеричной кодировке (плюс это осуществляется в нижнем регистре).</p>
7 hash ( string $algo , string $data [, bool $raw_output = FALSE ] ) : string<p>Теперь стоит рассказать про список параметров функций типа hash (хеш, хэш): •<strong>algo</strong>. Тут прописывается название алгоритма, выбранного для хэширования (тот же md5 или SHA-1). Существует целый список поддерживаемых алгоритмов, найти который не составляет труда; •<strong>data</strong>. Сообщение для хэширования. Без комментариев; •<strong>raw_output</strong>. Если этот параметр установлен в режим TRUE, то осуществляется вывод необработанных двоичных данных. Если же выставить его в FALSE, производится вывод данных в шестнадцатеричной кодировке (плюс это осуществляется в нижнем регистре).</p>
8 <h5>Возвращаемые значения</h5>
8 <h5>Возвращаемые значения</h5>
9 <p>При работе функции hash выполняется возврат строки, содержащей вычисленный код в нижнем регистре и в шестнадцатеричной кодировке. Но если raw_output будет задан как TRUE, произойдёт возврат кода в виде бинарных данных.</p>
9 <p>При работе функции hash выполняется возврат строки, содержащей вычисленный код в нижнем регистре и в шестнадцатеричной кодировке. Но если raw_output будет задан как TRUE, произойдёт возврат кода в виде бинарных данных.</p>
10 <h2>PHP хэш: хэширование MD5</h2>
10 <h2>PHP хэш: хэширование MD5</h2>
11 <p>В качестве продолжения статьи, стоит отдельно поговорить про хэширование по алгоритму MD5. Это будет неплохой пример, да и тема эта в целом весьма важна, а чтение не займёт у вас много времени. Но для начала скажем пару слов о самом алгоритме. MD5 (Message Digest 5) представляет собой 128-битный алгоритм хеширования, который был разработан Рональдом Ривестом в далёком 1991 г. Описан он в RFC 1321 (RFC, если не знаете, - это "Request for Comments" - техническая спецификация и стандарт, широко применяемый в глобальной сети).</p>
11 <p>В качестве продолжения статьи, стоит отдельно поговорить про хэширование по алгоритму MD5. Это будет неплохой пример, да и тема эта в целом весьма важна, а чтение не займёт у вас много времени. Но для начала скажем пару слов о самом алгоритме. MD5 (Message Digest 5) представляет собой 128-битный алгоритм хеширования, который был разработан Рональдом Ривестом в далёком 1991 г. Описан он в RFC 1321 (RFC, если не знаете, - это "Request for Comments" - техническая спецификация и стандарт, широко применяемый в глобальной сети).</p>
12 <p>Простейший пример практического применения хэша MD5 -<strong>шифрование пользовательских паролей</strong>. Как уже было сказано, хранить пароли в БД в открытом виде не просто моветон, а в принципе недопустимо. И вот здесь как раз и может прийти на помощь функция хэширования в PHP и соответствующий алгоритм.</p>
12 <p>Простейший пример практического применения хэша MD5 -<strong>шифрование пользовательских паролей</strong>. Как уже было сказано, хранить пароли в БД в открытом виде не просто моветон, а в принципе недопустимо. И вот здесь как раз и может прийти на помощь функция хэширования в PHP и соответствующий алгоритм.</p>
13 <p>В языке программирования PHP функция хэширования MD5 называется md5(). Она принимает одну строку, которую надо зашифровать. Возвращает же MD5-хэш (hash). На практике это может выглядеть следующим образом:</p>
13 <p>В языке программирования PHP функция хэширования MD5 называется md5(). Она принимает одну строку, которую надо зашифровать. Возвращает же MD5-хэш (hash). На практике это может выглядеть следующим образом:</p>
14 &lt;?php $str = "Password"; echo md5($str); ?&gt;<p>Если вы запустите этот скрипт, увидите MD5-хэш, который будет соответствовать строке "Password".</p>
14 &lt;?php $str = "Password"; echo md5($str); ?&gt;<p>Если вы запустите этот скрипт, увидите MD5-хэш, который будет соответствовать строке "Password".</p>
15 <p>Теперь простейший скрипт для проверки пароля и логина:</p>
15 <p>Теперь простейший скрипт для проверки пароля и логина:</p>
16 &lt;?php $login = "Admin"; $password = "dc647eb65e6711e155375218212b3964"; //Именно это значение в реальности считывается из базы данных if (($_GET['login'] == $login) &amp;&amp; (md5($_GET['password']) == $password)) echo "Добро пожаловать!"; else echo "Доступ запрещён"; ?&gt;<p>Если вы теперь перейдёте по ссылке "http://путь_к_скрипту.php?login=Admin&amp;password=Password", вы увидите: "Добро пожаловать!".</p>
16 &lt;?php $login = "Admin"; $password = "dc647eb65e6711e155375218212b3964"; //Именно это значение в реальности считывается из базы данных if (($_GET['login'] == $login) &amp;&amp; (md5($_GET['password']) == $password)) echo "Добро пожаловать!"; else echo "Доступ запрещён"; ?&gt;<p>Если вы теперь перейдёте по ссылке "http://путь_к_скрипту.php?login=Admin&amp;password=Password", вы увидите: "Добро пожаловать!".</p>
17 <h2>Свойства MD5</h2>
17 <h2>Свойства MD5</h2>
18 <p>У вышерассмотренного алгоритма есть следующие свойства: • hash содержит 32 символа; • hash уникален для каждой строки; • сам процесс MD5-хэширования является необратимым; • этот процесс отличается достаточной медлительностью.</p>
18 <p>У вышерассмотренного алгоритма есть следующие свойства: • hash содержит 32 символа; • hash уникален для каждой строки; • сам процесс MD5-хэширования является необратимым; • этот процесс отличается достаточной медлительностью.</p>
19 <p>Что касается третьего пункта, то он весьма важен, ведь какой был бы смысл в хэшировании, если бы оно было обратимым? И, действительно, не глупо ли шифровать пасворды, которые потом легко и просто можно расшифровать? Вопрос риторический.</p>
19 <p>Что касается третьего пункта, то он весьма важен, ведь какой был бы смысл в хэшировании, если бы оно было обратимым? И, действительно, не глупо ли шифровать пасворды, которые потом легко и просто можно расшифровать? Вопрос риторический.</p>
20 <p>Но если мы пойдём дальше, то увидим, что пункт номер 4 в нашем списке - это тоже плюс, как бы это не звучало парадоксально. Дело в том, что если человек, набирающий пароль, вынужден подождать 0,001 секунды (именно столько и длится процесс), то для него это не проблема - он от этого не пострадает и даже не заметит этой самой медлительности. Если же мы говорим про хакера, которому надо перебрать множество вариантов, то медлительность алгоритма придётся ему очень не кстати, ведь алгоритм задаёт предел - 1000 паролей в секунду. Да, многое зависит и от быстродействия сервера, но несмотря на это, низкая скорость при получении хеша MD5 - это всё-таки проблема для злоумышленника.</p>
20 <p>Но если мы пойдём дальше, то увидим, что пункт номер 4 в нашем списке - это тоже плюс, как бы это не звучало парадоксально. Дело в том, что если человек, набирающий пароль, вынужден подождать 0,001 секунды (именно столько и длится процесс), то для него это не проблема - он от этого не пострадает и даже не заметит этой самой медлительности. Если же мы говорим про хакера, которому надо перебрать множество вариантов, то медлительность алгоритма придётся ему очень не кстати, ведь алгоритм задаёт предел - 1000 паролей в секунду. Да, многое зависит и от быстродействия сервера, но несмотря на это, низкая скорость при получении хеша MD5 - это всё-таки проблема для злоумышленника.</p>
21 <p>На этом закончим и в очередной раз напомним:<strong>никогда не храните ваши пароли и пароли ваших пользователей в открытом виде</strong>- просто забудьте, что так можно делать, даже (и тем более) если вы обычный веб-мастер. Всегда отправляйте ваши пароли в БД в виде hash (алгоритм выбирайте на своё усмотрение) и сравнивайте не сами пасворды, а их хэши.</p>
21 <p>На этом закончим и в очередной раз напомним:<strong>никогда не храните ваши пароли и пароли ваших пользователей в открытом виде</strong>- просто забудьте, что так можно делать, даже (и тем более) если вы обычный веб-мастер. Всегда отправляйте ваши пароли в БД в виде hash (алгоритм выбирайте на своё усмотрение) и сравнивайте не сами пасворды, а их хэши.</p>
22 <p><em>Интересует PHP? Добро пожаловать на курс</em>:</p>
22 <p><em>Интересует PHP? Добро пожаловать на курс</em>:</p>
23 <p><em>Источники</em>: • https://www.php.net/manual/ru/function.hash.php; • https://www.internet-technologies.ru/articles/heshirovanie-paroley-v-php.html; • https://myrusakov.ru/md5-php.html; • https://snipp.ru/php/hash-php#link-md5.</p>
23 <p><em>Источники</em>: • https://www.php.net/manual/ru/function.hash.php; • https://www.internet-technologies.ru/articles/heshirovanie-paroley-v-php.html; • https://myrusakov.ru/md5-php.html; • https://snipp.ru/php/hash-php#link-md5.</p>
24  
24