Благодаря этим факторам алгоритм 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).