СУБД MySQL оснащена несколькими специализированными функциями, разработанными для выполнения операций кодировки данных. Эти функции перечислены в табл. 7.6.
Функции кодировки
Функция PASSWORD() используется для кодирования строки пароля, удовлетворяющего системе безопасности MySQL. Это кодирование необратимо и выполняется оно с помощью алгоритмов, аналогичных тем, что применяются в UNIX. Оно необходимо для системы аутентификации MySQL, и руководство по использованию MySQL предлагает применять для кодирования функции ENCODE() /DECODE() или AES_ENCRYPT() / AES_DECRYPT() вместо создания специальных приложений.
Функции кодировки
При желании можно прибегнуть к системному вызову операционной системы UNIX crypt() с использованием функции ENCRYPT() , которая принимает для шифрования кодируемую строку и (дополнительно) строку salt (строка, уникальным образом идентифицирующая пароль, во многом подобная ключу).
Функции кодировки
Для кодирования и декодирования строк можно воспользоваться функциями ENCODE() и DECODE() . Функция ENCODE() принимает два аргумента кодируемой строки и ключ, который служит основой для кодирования.
Функции кодировки
Криптологические подсказки
Функция ENCRYPT() работает только в том случае, когда операционная система поддерживает системный вызов crypt(). Результатом работы функции ENCRYPT() в операционных системах семейства Windows, не поддерживающих этот системный вызов, будет NULL.
Результатом вызова функции ENCODE() является двоичная строка, которая должна храниться в переменной типа BLOB. Предыдущий пример будет иметь следующий вид.
Функции кодировки
Более безопасной альтернативой функциям ENCODE() и DECODE() (в них используется относительно слабый механизм защиты) являются функции AES_ENCRYPT() и AES_DECRYPT() , использующие алгоритм усовершенствованного стандарта кодирования (Advanced Encryption Standard, AES). Рассмотрим такой вариант предыдущего примера, который демонстрирует, каким образом могут быть использованы эти функции.
Функции кодировки
Функции кодировки
Как и в случае вызова функции ENCODE(), результатом вызова функции AES_ ENCRYPT() является двоичная строка, которая должна храниться в переменной типа BLOB. Это закодированное значение можно декодировать с помощью функции AES_ DECRYPT() и соответствующего ключа.
Функции кодировки
Самозащита
Если ваша версия СУБД MySQL поддерживает SSL-протокол (Secure Socket Layer), рекомендуем воспользоваться еще более надежным алгоритмом Triple-Data Encryption Standard (DES). Он реализован в функциях DES_ENCRYPT() и DES_ DECRYPT() .
Для того чтобы вычислить контрольную сумму MD5 (128 битов), можно прибегнуть к возможностям функции MD5() .
Функции кодировки
Для того чтобы вычислить контрольные суммы SHA (их длина составляет 160 битов), можно прибегнуть к возможностям функции SHA() .
Функции кодировки
Возвращаемые этими функциями контрольные суммы являются шестнадцатеричны-ми значениям, которые можно использовать в качестве паролей в различных системах аутентификации, что видно из следующего примера.
Функции кодировки