Шифрование, встроенные криптографические средства php

Шифрование, встроенные криптографические средства php

Статья, посвященная шифрованию, оказалась очень популярной среди пользователей, поэтому я решил продолжить тему. Криптографические задачи очень часто встречаются при программировании на php. В этой заметке я решил рассмотреть встроенные криптографические алгоритмы, реализованные в php и рассказать зачем они нужны.

Функции однонаправленного шифрования

Функции однонаправленного шифрования еще называют хэш-функциями. Они предназначены для преобразования информации к виду, невозможному для расшифрования. При этом результат применения хэш-функции к различной информации (даже очень похожей) должен быть различным. На первый взгляд совершенно не понятно зачем такие функции могут понадобиться. На самом деле такие функции позволяют создать уникальный отпечаток (хэш) для преобразовываемой информации. С большой вероятностью отпечатки различных текстов будут различными.

Самым распространенным методом использования таких функций является хэширование паролей. Когда пользователь вводит свой пароль, то фактически проверяется не сам пароль, а его хэш. При утечке информации ил базы данных злоумышленник не получит паролей пользователей, а только их хэши.

Однако этим не ограничивается применение таких функций. Например, при хранении большого числа картинок изображения можно складывать в папки, которые сформированы на основе букв хэша номера изображения в системе (каждая следующая буква хэша определяет вложенную папку). Такой метод позволяет обойти ограничение на количество файлов в одной директории, так как файлы будут равномерно распределяться по сформированным папкам.

Итак, сами функции:

1. $fingerprint = md5($text); – 128 битный отпечаток.

2. $fingerprint = crc32($text); – 32 битный отпечаток. Не рекомендуется использовать для паролей из-за малой длины отпечатка.

3. $fingerprint = sha1($text); - возвращает 40-разрядное шестнадцатеричное число (160 бит).

4. Для первого и третьего алгоритмов есть функции md5_file и sha1_file, которые позволяют применить указанные алгоритма сразу к информации хранящейся в файлах.

5. Однако этими функция мине исчерпывается набор алгоритмов. В php реализована библиотека mhash, содержащая и другие алгоритмы хэширования. Доступ ко всем алгоритмам получается через функцию mhash(ALG_CONST, $text, $key). Функция принимает 3 аргумента. Первый представляет собой константу определяющую алгоритм. Вот основные из них: CRC32, MD5, MD4, SHA1, HAVAL, RIPEMD160, TIGER, GOST). Константа GOST соответствует российскому стандарту хэширования, который в настоящее время уже устарел. Второй аргумент функции представляет собой хэшируемый текст, третий аргумент – ключ, на котором проходит хеширование (если он нужен, например, для алгоритма GOST).

Функции симметричного шифрования

Предполагается, что информация шифруется на ключе, который известен только получателям и отправителю. Зашифрованная строка соответственно передается по незащищенным каналам. Безопасность обеспечивается лишь при гарантии сохранности ключа в секрете.

Доступ к различным алгоритмам симметричного шифрования можно получить при помощи библиотеки mcrypt, например так:

ALG_CONST – константа определяющая алгоритм шифрования. Сами константы можно найти в описании функции в документации. Я бы при выборе алгоритма склонился к алгоритму ГОСТ 28147-89, который доступен по константе MCRYPT_GOST. Не смотря на то, что совсем недавно его стойкость была понижена, его можно использовать, не опасаясь подвохов. На сколько я понимаю, алгоритм работает в режиме простой замены. Катати, ГОСТ 28147-89 в настоящее время уже заменен более новым алгоритмом. Второй аргумент $key – ключ, на котором происходит шифрование. Третий аргумент $text представляет собой шифруемый текст. Последний аргумент определяет константу направления шифрования: MCRYPT_ENCRYPT – зашифровать текст, MCRYPT_DECRYPT – расшифровать текст.

Функции асимметричного шифрования

При таком шифровании у каждого абонента есть два ключа публичный и секретный. Публичный известен всем. Например, Алиса отправляет Бобу сообщение. Для шифрования она использует открытый ключ Боба. А сообщение может расшифровать только Боб, т.к. для этого необходим секретный ключ Боба.

Такое шифрование в php поддерживается через систему OpenSSL. Для детального изучения вам придется проследовать в документацию, так как этот метод гораздо более сложен для понимания и не укладывается в рамки этой статьи.

Если у вас есть вопросы – задавайте их, отвечу всем.

Нет комментариев.
Добавить комментарий
Вам необходимо включить показ изображений в браузере для того чтобы увидеть код

Дайте нам знать, что вы - живой человек. Для нас это важно!
Кликните, если плохо видно

Прежде чем высказать свое мнение, прочитайте пожалуйста: правила

Рейтинг@Mail.ru