Аргерих Л. О языке РНР. Часть 5. Страница 78


Благодаря этим факторам алгоритм MD5 целесообразно применять для за- шифровывания паролей, при условии, что пароли выбираются надежные. Это применение основано на том, что первоначальный пароль нельзя восста­новить по его отпечатку, но при регистрации пользователя можно хеширо- вать его пароль и сравнивать два отпечатка.

Хранение паролей в открытом виде - серьезная угроза безопасности, по­скольку при компрометации базы данных то же самое происходит и с паро­лями. Пропустите пароль через алгоритм MD5 и сохраните полученный от­печаток. Когда пользователь зарегистрируется и вводит свой про­

пустите его через алгоритм MD5. Если отпечаток совпадает с тем, который был сохранен ранее, по всей вероятности, введенные данные были одинако­выми.

Не следует забывать, что если пароль легко угадываем, то система не защи­щена, поскольку уязвима для атаки грубой силой. Чтобы получить дополни­тельную информацию о том, как выбирать надежные пароли, обратитесь к разделу «Ресурсы и материалы для дальнейшего изучения» в конце данной главы.

Функцию PHP md5() можно применять для создания отпечатков любых дан­ных. Приведем пример:

<?php

Sfingerprint = md5($password); ?>

У алгоритма MD5 много других применений. С его помощью можно проверить, был ли изменен файл со времени последнего просмотра. Сохранив отпечаток файла, можно быстро проверить, совпадает ли новый отпечаток с прежним.

С той же целью могут применяться функции CRC32, выполняющие анало­гичную работу. Функция CRC32 не пригодна для работы с паролями, по­скольку создает всего лишь 32-разрядный отпечаток, а не 128-разрядный. В результате вероятность получить одинаковый результат для двух разных наборов входных данных значительно выше.

Кроме функций MD5 и CRC32, РНР предоставляет доступ к библиотеке mhash. Эта библиотека содержит другие хеширующие функции помимо ал­горитмов MD5 и CRC32. Доступ к этим алгоритмам осуществляется через функцию mhash().

Эта функция принимает два или три аргумента: первый аргумент — это кон­станта для алгоритма (объяснение ниже), второй аргумент - строка, кото­рую надо хешировать, а третий аргумент - ключ, который следует использо­вать при хешировании. Вот краткий пример хеширования при помощи ал­горитма MD5 и функции mhash ():

<?php

$passphrase="this is my secret passphrase"; echo("My passphrase hashed using md5 is:

echo(mhash(MASH_MD5, Spassphrase)); ?>

Ниже перечислены основные алгоритмы, поддерживаемые mhash. Дополни­тельную информацию можно получить на http://mhash.sourceforge.net/"> http://mhash.sourceforge.net/ (табл. 23.2).