Spec-Zone .ru
спецификации, руководства, описания, API

12.13. Шифрование и Функции Сжатия

Таблица 12.17. Функции шифрования

Имя Описание
AES_DECRYPT() Дешифруйте AES использования
AES_ENCRYPT() Зашифруйте AES использования
COMPRESS() Возвратите результат как двоичную строку
DECODE() Декодирует зашифрованное использование строки, КОДИРУЮТ ()
DES_DECRYPT() Дешифруйте строку
DES_ENCRYPT() Зашифруйте строку
ENCODE() Закодируйте строку
ENCRYPT() Зашифруйте строку
MD5() Вычислите контрольную сумму MD5
OLD_PASSWORD() Возвратите значение пред4.1 реализаций ПАРОЛЯ
PASSWORD() Вычислите и возвратите строку пароля
SHA1(), SHA() Вычислите SHA 1 160-разрядная контрольная сумма
SHA2() Вычислите SHA 2 контрольных суммы
UNCOMPRESS() Распакуйте сжатую строку
UNCOMPRESSED_LENGTH() Возвратите длину строки перед сжатием
VALIDATE_PASSWORD_STRENGTH() Определите силу пароля

Многие шифрование и сжатие функционируют строки возврата, для которых результат мог бы содержать произвольные значения байта. Если Вы хотите сохранить эти результаты, используйте столбец с a VARBINARY или BLOB тип данных двоичных строк. Это избежит потенциальных проблем с удалением конечного пробела или преобразованием набора символов, которое изменило бы значения данных, те, которые могут произойти, если Вы используете нетип данных двоичных строк (CHAR, VARCHAR, TEXT).

Некоторое шифрование функционирует строки возврата символов ASCII: MD5(), OLD_PASSWORD(), PASSWORD(), SHA(), SHA1(), SHA2(). В MySQL 5.7 их возвращаемое значение является недвоичной строкой, у которой есть набор символов и сопоставление, определенное character_set_connection и collation_connection системные переменные.

Для того, версий, в который функции такой как MD5() или SHA1() возвратите строку шестнадцатеричных цифр как двоичная строка, возвращаемое значение не может быть преобразовано в верхний регистр или сравнено нечувствительным к регистру способом, как. Следует преобразовать значение в недвоичную строку. См. обсуждение преобразования двоичной строки в Разделе 12.10, "Функции броска и Операторы".

Если приложение хранит значения от функции такой как MD5() или SHA1() это возвращает строку шестнадцатеричных цифр, более эффективное хранение и сравнения могут быть получены, преобразовывая шестнадцатеричное представление двоичному использованию UNHEX() и хранение результата в a BINARY(N) столбец. Каждая пара шестнадцатеричных цифр требует одного байта в двоичной форме, таким образом, значение N зависит от длины шестнадцатеричной строки. N 16 для MD5() значение и 20 для a SHA1() значение. Для SHA2(), N диапазоны от 28 до 32 в зависимости от параметра, определяющего требуемую длину в битах результата.

Штраф размера за хранение шестнадцатеричной строки в a CHAR столбец по крайней мере два раза, до восьми раз, если значение сохранено в столбце, который использует utf8 набор символов (где каждый символ использует 4 байта). Хранение строки также приводит к более медленным сравнениям из-за больших значений и потребности принять правила сопоставления набора символов во внимание.

Предположите, что приложение хранит MD5() представьте значения в виде строки в a CHAR(32) столбец:

CREATE TABLE md5_tbl (md5_val CHAR(32), ...);INSERT INTO md5_tbl (md5_val, ...) VALUES(MD5('abcdef'), ...);

Чтобы преобразовать шестнадцатеричные строки в более компактную форму, измените приложение, чтобы использовать UNHEX() и BINARY(16) вместо этого следующим образом:

CREATE TABLE md5_tbl (md5_val BINARY(16), ...);INSERT INTO md5_tbl (md5_val, ...) VALUES(UNHEX(MD5('abcdef')), ...);

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

Отметить

Использует для MD5 и SHA, 1 алгоритм стал известным. Можно хотеть рассмотреть использование одной из других функций шифрования, описанных в этом разделе вместо этого, такой как SHA2().

Предостережение

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