![]() |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|
В стандартной установке PHP предоставляет нам некотрые функции для шифрования, например, crypt() и md5(). Остальные нужно явно указывать при компиляции (mcrypt, mhash, cURL). Функция crypt() выполняет односторонее DES-шифрование. Ей нужно передать обычный текст для шифрования, чтобы получить зашифрованный:
Если второй параметр не указать, то PHP автоматически сгенерирует случайную пару символов для базиса шифрования. При помощи crypt() можно шифровать и по алгоритму md5 ( не только при помощи функции md5() ). Достаточно установить константу CRYPT_MD5 в 1. Зададим базис, начинающийся с $1$ для использования md5 в функции crypt():
Большой набор алгоритмов и режимов шифрования включает в себя библиотека mcrypt. Итак, зашифруем и расшифруем информацию с помощью алгоритма Blowfish.
Почти ничего не понятно, да :)? Сейчас постараюсь объяснить. Все данные шифруются и расшифроввываются с помощью функций mcrypt_encrypt() и mcrypt_decrypt(). Каждая их них принимает пять аргументов. Первый аргумент - применяемый алгоритм. Все поддерживаемые Можно применять MCRYPT_DEV_RANDOM и MCRYPT_RAND. Но тогда надо вызывать функцию srand(), т.к. не все ОС поддерживают псевдоустройства случайных генераторов (это касается функции MCRYPT_RAND). Можно было привести несколько примеров шифрования информации и
сохранения в базе данных или файле для дальнейшего использования, но
это я решил оставить вам в качестве домашнего задания =). А сейчас
поговорим о способах хранения информации (паролей и т.д.) на вашем Сколько раз уже было сказано, что не нужно хранить пароли в Допустим, есть пароли для подключения к MySQL. Сохраните их в переменных окружения (не самый лучший вариант, сейчас скажу почему), сервер будет их загружать при старте. mysql_connect ('localhost', $_ENV['MYSQL_USER'], Минус тут в том, что пароли будут доступны из других мест. Функция
phpinfo() выведет все переменные окружения, доступные в скрипте,
включая ваши пароли. Если вы работаете с разделенным виртальным
хостингом, то нужно установить переменные окружения, чтобы они были SetEnv MYSQL_USER "user" Этот файл нужно включить в директиву <VirtualHost> в главном конфигурационном файле: Include "/path_to_file/" Так, теперь немного о проверке данных с помощью хеширования.
Допустим, мы отправляем данные в куки или через форму и не хотим,
чтобы пользователи смогли их подменить. Можно вместе с данными послать
хеш этих данных с каким-либо словом (зашифрованным в md5). При
получении информации обратно, вычисляем этот хеш с помощью нашего
После получения обратно проверяем:
Для использования хеша в cookie изменим немного этот скрипт:
Проверяем полученное:
Конечно, если кто-то узнает это секретное слово, то вся работа
впустую. Тут можно либо менять его постоянно, либо пользоваться
переменной $id, т.е. несколько разных слов, выбранных с помощью $id%10
(если 10 слов). Можно использовать модуль mhash, тут вы не будите
ограничены хешами в md5. Он поддерживает несколько алгоритмов А теперь хотелось бы затронуть тему шифрования почты. Использовать будем GPG (ибо Open Source!). Сначала код, а потом пояснения.
С начала мы вызываем программу GPG, расположенную в Установка переменных окружение HOME и USER указывает GPG, где ей
нужно искать свои настройки шифрования ($HOME/.gnupg/secring.gpg). Параметры --encrypt и --sing заставляют GPG зашифровать Параметр --armor генерирует простой текст вместо двоичного кода, для более удобной рассылки. Обычно закрытые ключи защищаются с помощью идентификационной фразы. Если взломщик скопирует закрытый ключ, защищенный идентификационной фразой, то он ничего не сможет сделать с письмом, т.к. GPG запрашивает её при расшифровке. В этом коде эта фраза не используется. Очень много можно написать по этой теме, но статью сильно растягивать не хочется =). Ссылки по теме: http://www.php.net/md5
|
||||||||||
by m0zg |
||||||||||