Поиск

Функции шифрования

Функции, описанные в данном разделе, шифруют и дешифруют значения данных. Если вы хотите сохранять результаты функции шифрования, которые могут иметь про­извольные байтовые значения, применяйте столбцы типа BLOB вместо CHAR или VARCHAR, чтобы избежать потенциальных проблем с удалением завершающих пробелов, которые изменяют значения данных.

  • AES_ENCRYPT{строка,строка_ключа)
    AESJ3ECRYPT {зажфроваиная_строка, строка__ключа)
  • Эти функции позволяют выполнять шифрование и дешифрацию данных с исполь­зованием официального алгоритма AES (Advanced Encryption Standard), ранее из­вестного как "Rijndael". Применяется кодирование с 128-разрядным ключом, но можно расширить его до 256 разрядов, должным образом изменив исходные тек­сты. Мы выбрали длину ключа 128, поскольку он работает намного быстрее и при этом обеспечивает приемлемый уровень безопасности.
    Входные аргументы могут иметь любую длину. Если любой из них равен NULL, результатом функции также будет NULL.
    Поскольку AES — алгоритм блочного типа, дополнение применяется для строк с нечетным количеством символов, и поэтому длина результирующей строки может быть рассчитана как 16* (trunc (длияа_ строки/16)+1).
    Если функция aes_DECRYPT() обнаруживает неверные данные или неправильное дополнение, она возвращает NULL. Однако существует вероятность, что AES_DECRYPT() вернет значение, не равное NULL (возможно, "мусор"), если вход­ные данные или ключ не верны.
    Вы можете использовать AES-функции для сохранения данных в зашифрованной форме, модифицировав существующие запросы:
    INSERT INTO t VALUES (1,AES_ENCRYPT( 'text', 'password')) ;
    Можно обеспечить даже более высокий уровень безопасности, если не передавать значение ключа для каждого запроса, а сохранять его в переменной сервера во время подключения, например:
    SELECT @password:='my password1;
    INSERT INTO t VALUES (1,AES_ENCRYPT('text',Qpassword));
    Функции AESJENCRYPT О и AESJDECRYPT () были добавлены в MySQL 4.0.2 и могут рассматриваться как наиболее криптографически безопасные функции, доступные в MySQL на текущий момент.

  • DECODE {зашифрованная_строка, строка_пароля)
  • Расшифровывает строку зашифрованная_строка, используя значение строка_пароля в качестве пароля. Аргумент зашифрованная_строка должен быть строкой, ранее возвращенной функцией ENCODE ().
  • ENCODE {строка, строка_пароля)
  • Шифрует строку строка, используя значение строка_пароля в качестве пароля. Для расшифровки результата применяется функция DECODE(). Результатом явля­ется бинарная строка той же длины, что и строка. Если нужно сохранить ее в столбце, применяйте тип BLOB.
  • DES_DECRYPT {зашфрованная_строка[, строка _ключа])
  • Расшифровывает строку з а шифров а нная__ строка, зашифрованную с помощью DESENCRYPT (). В случае ошибки возвращает NULL. Следует отметить, что эта функ­ция работает, только если MySQL настроен на поддержку SSL. Если не указан ар­гумент строка_ключа, DES_deCRYPT () проверяет первый байт зашифрованной строки для определения номера DES-ключа, использованного при шифровании исходной строки, а затем читает ключ из файла DES-ключей для расшифровки сообщения. Чтобы это работало, пользователь должен иметь привилегию SUPER. Файл ключей может быть указан с помощью опции сервера —des-key-f ile. Если вы передаете этой функции аргумент строка__ключа, он используется в каче­стве ключа при расшифровке сообщения.
    Если аргумент зашифрованная__строка не выглядит как зашифрованная строка, MySQL вернет строку зашифрованная_строка без изменений. Функция DESDECRYPT () была добавлена в MySQL 4.0.1.
  • DES_ENCRYPT (строка[, {номер_ключа\ строка_ключа) ])
  • Шифрует строку с помощью заданного ключа, используя тройной DES-алгоритм. В случае ошибки возвращает NULL.
    Следует отметить, что эта функция работает, только если MySQL настроен на поддержку SSL. Ключ шифрования выбирается на базе второго аргумента DES_ENCRYPT (), если таковой указан:

    Имя файла ключей указывается в опции сервера ~des-key-f ile.
    Возвращаемое значение является бинарной строкой, в которой первый символ - это CHAR (128| номер_ключа). 128 добавлено для того, чтобы упростить распознавание ключа шифрования. Если применяется строковый ключ, номер_ключа будет равен 127. Длина строки результата рассчитывается как новая_длина = оригинальная__длина+ (8 - {оригинальная_длина % 8)) +1. Каждая строка в файле DES-ключей имеет следующий формат: номер_ключа строка_ключа__о\ез.

    Каждый номер_ключа должен быть числом в диапазоне от 0 до 9. Строки в файле могут следовать в любом порядке. строка_ключа_с!е5 — это строка, которая будет использоваться для шифрования сообщения. Между номером и ключом должен быть, по меньшей мере, один пробел. Первый ключ является ключом по умолча­нию, который применяется в случае, если не указан аргумент строка ключа в функции DES_ENCRYPT().
    Можно указать MySQL на необходимость чтения новых значений ключа из файла ключей с помощью оператора FLUSH DES_KEY_FILE. Это требует наличия привиле­гии RELOAD.
    Одна выгода от наличия набора ключей по умолчанию состоит в том, что это дает возможность приложениям проверить наличие зашифрованных значений столб­цов, без необходимости предоставления конечному пользователю прав непосред­ственного доступа к ключам.
    mysql> SELECT customer_address FROM customer_table WHERE
    -> crypted _credit__card = DES_ENCRYPT('credit _card_number');
    DES_ENCRYPT () была добавлена в MySQL 4.0.1.
  • ENCRYPT (строка [, нач])
  • Шифрует строку строка, используя системный вызов Unix crypt (). Аргумент нач должен быть строкой их двух символов. (Начиная с версии MySQL 3.22.16, нач может быть длиннее 2 символов.)
    raysql> SELECT ENCRYPT('hello'); -> 'VxuFAJXVARROc'
    ENCRYPT () игнорирует все, кроме первых восьми символов аргумента строка, по крайней мере, в некоторых системах. Это поведение определяется реализацией лежащего в основе системного вызова crypt ().
    Если функция crypt () не доступна в вашей системе, ENCRYPT () всегда возвращает NULL. По этой причине мы рекомендуем применять вместо этой функции MD5() или SHA1 (), поскольку эти две функции представлены на всех платформах.
  • MD5{строка)
  • Вычисляет 128-разрядную контрольную сумму MD5 для аргумента строка. Зна­чение возвращается в виде 32-разрядной шестнадцатеричной строки или же NULL, если аргумент равен NULL. Возвращаемое значение может быть использовано, на­пример, в качестве хэш-ключа.
    mysql> SELECT MD5(' testing1);
    -> 'ae2blfca515949e5d54fb22b8ed95575f
    Дополнительные сведения можно найти в документе "RSA Data Security, Inc. MD5 Message-Digest Algorithm" ("Компания RSA Data Security, Inc. Алгоритм вычисле­ния дайджеста сообщения"). Функция MD5 () появилась в MySQL 3.23.2.
  • OLD_PASSWORD {строка)
  • Функция OLD_PASSWORD() стала доступной, начиная с MySQL 4.1, когда была из­менена реализация password() для повышения безопасности. OLD_PASSWORD () воз вращает такое же значение, какое возвращала старая реализация (до версии 4.1) функции PASSWORD ().
    a PASSWORD{строка)
    Вычисляет и возвращает строку пароля по значению пароля строка, заданному простым текстом, или же NULL, если аргумент равен NULL. Эта функция применя­ется для шифрования паролей, сохраняемых в столбце Password таблицы приви­легий user.
    mysql> SELECT PASSWORD('badpwd'); -> '7f84554057dd964bf
    Шифрование функцией PASSWORD () является однонаправленным (то есть необра­тимым).

    На заметку!
    Функция PASSWORD () используется системой аутентификации сервера MySQL, которая не долж­на быть задействованной в ваших собственных приложениях. Для этой цели вместо нее приме­няйте функции MD5 () и SHA1 (). Кроме того, в документе RFC2195 можно найти дополнительную информацию по работе с паролями и аутентификацией прикладных приложений.

  • SHA1{строка) SHA(строка)
Вычисляет 160-разрядную контрольную сумму SHA1 для строки, как описано в документе RFC3174 ("Secure Hash Algorithm" - "Защищенный алгоритм хэширо­вания"). Возвращаемое значение - шестнадцатеричная строка длиной в 40 цифр или NULL, если аргумент равен NULL. Одним из возможных применений этой функции является получение хэш-ключа. Вы также можете использовать ее как безопасную криптографическую функцию для сохранения паролей.
mysql> SELECT SHA1('abc');
-> fa9993e364706816aba3e25717850c26c9cd0d89d'
Функция SHA () была добавлена в MySQL 4.0.2 и может рассматриваться как более безопасный эквивалент с точки зрения криптографии, нежели MD5 (). SHA () явля­ется синонимом для SHA1 ( ).