Spec-Zone .ru
спецификации, руководства, описания, API
|
Таблица 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.6 их
возвращаемое значение является недвоичной строкой, у которой есть набор символов и сопоставление, определенное
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, которым они пишутся. Чтобы избежать этих типов воздействия, приложения могут зашифровать чувствительные значения на стороне клиента прежде, чем отправить им серверу. Те же самые соображения применяются к ключам шифрования. Чтобы избежать представлять их, приложения могут использовать хранимые процедуры, чтобы зашифровать и дешифровать значения на стороне сервера.
AES_DECRYPT(
crypt_str
,key_str
)
Эта функция дешифрует данные, используя официальный AES (Усовершенствованный стандарт шифрования)
алгоритм. Для получения дополнительной информации см. описание AES_ENCRYPT()
.
AES_ENCRYPT()
и AES_DECRYPT()
включите шифрованию и дешифрованию данных,
используя официальный AES (Усовершенствованный стандарт шифрования) алгоритм, ранее известный как
"Rijndael". Кодирование с
128-разрядной длиной ключа используется, но можно расширить его до 256 битов, изменяя источник. Мы
выбрали 128 битов, потому что это намного быстрее, и это достаточно безопасно в большинстве целей.
AES_ENCRYPT()
шифрует строку и возвращает двоичную строку. AES_DECRYPT()
дешифрует зашифрованную строку и возвращает
исходную строку. Входными параметрами может быть любая длина. Если любой параметр NULL
, результат этой функции также NULL
.
Поскольку AES является алгоритмом блочного уровня, дополнение используется, чтобы закодировать неравные строки длины и таким образом, строковая длина результата может быть вычислена, используя эту формулу:
16 * (trunc(string_length
/ 16) + 1)
Если AES_DECRYPT()
обнаруживает недопустимые данные или неправильное
дополнение, они возвращаются NULL
. Однако, это возможно для AES_DECRYPT()
возвратиться не -NULL
значение (возможно мусор), если входные данные или ключ недопустимы.
Можно использовать функции AES, чтобы хранить данные в зашифрованной форме, изменяя Ваши запросы:
INSERT INTO t VALUES (1,AES_ENCRYPT('text','password'));
AES_ENCRYPT()
и AES_DECRYPT()
может считаться наиболее криптографически
безопасными функциями шифрования, в настоящий момент доступными в MySQL.
Сжимает строку и возвращает результат как двоичную строку. Эта функция требует, чтобы MySQL был
скомпилирован с библиотекой сжатия такой как zlib
. Иначе, возвращаемое
значение всегда NULL
. Сжатая строка может быть несжатой с UNCOMPRESS()
.
mysql>SELECT LENGTH(COMPRESS(REPEAT('a',1000)));
-> 21mysql>SELECT LENGTH(COMPRESS(''));
-> 0mysql>SELECT LENGTH(COMPRESS('a'));
-> 13mysql>SELECT LENGTH(COMPRESS(REPEAT('a',16)));
-> 15
Сжатое строковое содержание сохранено следующий путь:
Пустые строки сохранены как пустые строки.
Непустые строки сохранены как 4-байтовая длина несжатой строки (младший
байт сначала), сопровождаются сжатой строкой. Если строка заканчивается пространством,
дополнительное".
"символ добавляется, чтобы избежать,
чтобы проблемы с обрезкой endspace были должны результат быть сохраненными в a CHAR
или VARCHAR
столбец. (Однако, использование нетипов данных
двоичных строк такой как CHAR
или VARCHAR
сохранить сжатые строки не рекомендуется так или
иначе, потому что преобразование набора символов может произойти. Используйте a VARBINARY
или BLOB
столбец двоичной строки вместо этого.)
Дешифрует зашифрованную строку crypt_str
использование pass_str
как пароль. crypt_str
должна быть строка, возвращенная из ENCODE()
.
DES_DECRYPT(
crypt_str
[,key_str
])
Дешифрует строку, зашифрованную с DES_ENCRYPT()
. Если ошибка происходит, эта функция возвраты NULL
.
Эта функция работает, только если MySQL был сконфигурирован с поддержкой SSL. См. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".
Если нет key_str
параметр дается, DES_DECRYPT()
исследует первый байт зашифрованной строки, чтобы
определить ключевое число DES, которое использовалось, чтобы зашифровать исходную строку, и затем
читает ключ из файла ключей DES, чтобы дешифровать сообщение. Для этого, чтобы работать,
пользователь должен иметь SUPER
полномочие. Файл ключей может быть определен с --des-key-file
параметр сервера.
Если Вы передаете эту функцию a key_str
параметр, та
строка используется в качестве ключа для того, чтобы дешифровать сообщение.
Если crypt_str
параметр, кажется, не зашифрованная строка,
MySQL возвращает данный crypt_str
.
DES_ENCRYPT(
str
[,{key_num
|key_str
}])
Шифрует строку с данным ключом, используя алгоритм Тройного DES.
Эта функция работает, только если MySQL был сконфигурирован с поддержкой SSL. См. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".
Ключ шифрования, чтобы использовать выбирается основанный на втором параметре DES_ENCRYPT()
, если Вам дали. Без параметра используется первый ключ
от файла ключей DES. С a key_num
параметр, данное ключевое
число (от 0 до 9) от файла ключей DES используется. С a key_str
параметр, данная ключевая строка используется, чтобы зашифровать str
.
Файл ключей может быть определен с --des-key-file
параметр сервера.
Строка возврата является двоичной строкой, где первый символ CHAR(128 |
. Если
ошибка происходит, key_num
)DES_ENCRYPT()
возвраты NULL
.
Эти 128 добавляются, чтобы облегчить распознавать зашифрованный ключ. Если Вы используете строковый
ключ, key_num
127.
Строковая длина для результата дается этой формулой:
new_len
=orig_len
+ (8 - (orig_len
% 8)) + 1
У каждой строки в файле ключей DES есть следующий формат:
key_num
des_key_str
Каждый key_num
значение должно быть числом в диапазоне от
0
к 9
. Строки в файле могут быть в любом
порядке. des_key_str
строка, которая используется, чтобы
зашифровать сообщение. Должно быть по крайней мере одно пространство между числом и ключом. Первый
ключ является ключом значения по умолчанию, который используется, если Вы не определяете ключевого
параметра DES_ENCRYPT()
.
Можно сказать MySQL читать новые значения ключа из файла ключей с FLUSH DES_KEY_FILE
оператор. Это требует RELOAD
полномочие.
Одно преимущество наличия ряда ключей значения по умолчанию - то, что это дает приложениям способ проверить на существование зашифрованных значений столбцов, не давая конечного пользователя право дешифровать те значения.
mysql>SELECT customer_address FROM customer_table
>WHERE crypted_credit_card = DES_ENCRYPT('credit_card_number');
Зашифровать str
использование pass_str
как пароль. Результатом является двоичная строка
той же самой длины как str
. Чтобы дешифровать результат,
использовать DECODE()
.
ENCODE()
функция больше не должна использоваться. Предпочтительно использовать AES_ENCRYPT()
вместо этого.
Чтобы уменьшить риск, соленое значение должно использоваться с ENCODE()
. Например:
ENCODE('plaintext', CONCAT('my_random_salt','my_secret_password'))
Новое случайное соленое значение должно использоваться всякий раз, когда пароль обновляется.
Шифрует str
использование Unix crypt()
системный вызов и возвраты двоичная строка. salt
параметром должна быть строка по крайней мере с двумя символами, или результат будет NULL
. Если нет salt
параметр дается, случайное значение используется.
mysql> SELECT
ENCRYPT('hello');
-> 'VxuFAJXVARROc'
ENCRYPT()
игнорирует все кроме первых восьми символов str
, по
крайней мере, на некоторых системах. Это поведение определяется реализацией базового crypt()
системный вызов.
Использование ENCRYPT()
с ucs2
, utf16
,
utf16le
, или utf32
многобайтовые наборы
символов не рекомендуются, потому что системный вызов ожидает строку, завершенную нулевым байтом.
Если crypt()
не доступно на Вашей системе (как имеет место с Windows),
ENCRYPT()
всегда возвраты NULL
.
Вычисляет 128-разрядную контрольную сумму MD5 для строки. Значение возвращается как строка 32
шестнадцатеричных цифр, или NULL
если параметр был NULL
. Возвращаемое значение может, например, использоваться в
качестве ключа хеша. См. примечания в начале этого раздела о хранении значений хэш-функции
эффективно.
Возвращаемое значение является недвоичной строкой в наборе символов соединения.
mysql> SELECT
MD5('testing');
-> 'ae2b1fca515949e5d54fb22b8ed95575'
Это - "RSA Data Security, Inc. Алгоритм Обзора сообщения MD5."
См., что примечание расценивает алгоритм MD5 вначале этот раздел.
OLD_PASSWORD()
был добавлен когда реализация PASSWORD()
был изменен в MySQL 4.1, чтобы улучшить безопасность. OLD_PASSWORD()
возвращает значение пред4.1 реализаций PASSWORD()
как строка, и предназначается, чтобы разрешить Вам
сбрасывать пароли для любых пред4.1 клиентов, которые должны соединиться с Вашим сервером MySQL
версии 5.6, не блокируя им. См. Раздел 6.1.2.4, "Пароль,
Хеширующий в MySQL".
Возвращаемое значение является недвоичной строкой в наборе символов соединения.
Вычисляет и возвращает хешированную строку пароля из пароля в виде открытого текста str
и возвращает недвоичную строку в наборе символов
соединения, или NULL
если параметр NULL
.
Эта функция является интерфейсом SQL к алгоритму, используемому сервером, чтобы зашифровать пароли
MySQL для хранения в mysql.user
таблица предоставления.
Метод хеширующего пароля, используемый PASSWORD()
зависит от значения old_passwords
системная переменная:
mysql>SET old_passwords = 0;
mysql>SELECT PASSWORD('mypass');
+-------------------------------------------+| PASSWORD('mypass') |+-------------------------------------------+| *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 |+-------------------------------------------+mysql>SET old_passwords = 1;
mysql>SELECT PASSWORD('mypass');
+--------------------+| PASSWORD('mypass') |+--------------------+| 6f8c114b58f2ce9e |+--------------------+
Если old_passwords=1
, PASSWORD('
возвращает
то же самое значение как str
')OLD_PASSWORD('
.
str
')
SHA 256 хеширующих паролей (old_passwords=2
) использует случайное соленое значение, которое
делает следствие PASSWORD()
недетерминированный. Следовательно, операторы, которые используют эту функцию, не безопасны для
основанной на операторе репликации и не могут быть сохранены в кэше запроса.
Для описаний разрешенных значений old_passwords
, см. Раздел
5.1.4, "Системные Переменные Сервера".
Шифрование, выполняемое PASSWORD()
является односторонним (не обратимый). Это не тот же самый
тип шифрования как использующийся для паролей Unix; для этого использовать ENCRYPT()
.
PASSWORD()
функция используется системой аутентификации в MySQL
Server; недопустимо использовать это в своих собственных
приложениях. С этой целью рассмотреть MD5()
или SHA2()
вместо этого. Также см.
Операторы, которые вызывают PASSWORD()
может быть записан в журналах сервера или в файле
истории такой как ~/.mysql_history
, что означает, что пароли в
виде открытого текста могут быть считаны любым имеющим доступ для чтения к той информации. См.
Раздел
6.1.2, "Сохраняя Пароли, Безопасные".
Вычисляет SHA 1 160-разрядная контрольная сумма для строки, как описано в RFC 3174 (Безопасный
Хеш-алгоритм). Значение возвращается как строка 40 шестнадцатеричных цифр, или NULL
если параметр был NULL
. Одно из
возможных применений для этой функции как ключ хеша. См. примечания в начале этого раздела о
хранении значений хэш-функции эффективно. Можно также использовать SHA1()
как криптографическая функция для того, чтобы сохранить
пароли. SHA()
синонимично с SHA1()
.
Возвращаемое значение является недвоичной строкой в наборе символов соединения.
mysql> SELECT
SHA1('abc');
-> 'a9993e364706816aba3e25717850c26c9cd0d89d'
SHA1()
может
считаться криптографически более безопасным эквивалентом MD5()
. Однако, см., что примечание расценивает MD5 и SHA 1
алгоритм вначале этот раздел.
Вычисляет SHA 2 семейства хеш-функций (SHA 224, SHA 256, SHA 384, и SHA 512). Первым параметром
является строка открытого текста, которая будет хеширована. Второй параметр указывает на требуемую
длину в битах результата, у которого должно быть значение 224, 256, 384, 512, или 0 (который
эквивалентен 256). Если любой параметр NULL
или длина хеша не является
одним из разрешенных значений, возвращаемое значение NULL
. Иначе,
функциональным результатом является значение хэш-функции, содержащее требуемое число битов. См.
примечания в начале этого раздела о хранении значений хэш-функции эффективно.
Возвращаемое значение является недвоичной строкой в наборе символов соединения.
mysql> SELECT SHA2('abc',
224);
-> '23097d223405d8228642a477bda255b32aadbce4bda0b3f7e36c9da7'
Эта функция работает, только если MySQL был сконфигурирован с поддержкой SSL. См. Раздел 6.3.9, "Используя SSL для Безопасных Соединений".
SHA2()
может
считаться криптографически более безопасным чем MD5()
или SHA1()
.
UNCOMPRESS(
string_to_uncompress
)
Распаковывает строку, сжатую COMPRESS()
функция. Если параметром не является сжатое значение,
результат NULL
. Эта функция требует, чтобы MySQL был скомпилирован с
библиотекой сжатия такой как zlib
. Иначе, возвращаемое значение всегда
NULL
.
mysql>SELECT UNCOMPRESS(COMPRESS('any string'));
-> 'any string'mysql>SELECT UNCOMPRESS('any string');
-> NULL
UNCOMPRESSED_LENGTH(
compressed_string
)
Возвращает длину, которую сжатая строка имела прежде, чем быть сжатым.
mysql> SELECT
UNCOMPRESSED_LENGTH(COMPRESS(REPEAT('a',30)));
-> 30
VALIDATE_PASSWORD_STRENGTH(
str
)
Учитывая параметр, представляющий пароль в виде открытого текста, эта функция возвращает целое число, чтобы указать, как strong пароль. Возвращаемое значение колеблется от 0 (слабый) к 100 (strong).
Пароль подвергается все более и более строгим тестам, и возвращаемое значение отражается, какие тесты были удовлетворены, как показано в следующей таблице.
Тест пароля | Возвращаемое значение |
---|---|
Длина <4 | 0 |
Длина ≥ 4 и <validate_password_length |
25 |
Удовлетворяет политику 1 (LOW ) |
50 |
Удовлетворяет политику 2 (MEDIUM ) |
75 |
Удовлетворяет политику 3 (STRONG ) |
100 |
Оценка пароля VALIDATE_PASSWORD_STRENGTH()
делается validate_password
плагин. Если тот плагин не устанавливается, функция всегда возвращается 0. Для получения информации
об установке validate_password
плагин, см. Раздел
6.1.2.6, "Плагин Проверки допустимости Пароля". Чтобы исследовать или
сконфигурировать параметры, которые влияют на тестирование пароля, проверьте или установите
системные переменные, реализованные validate_password
плагин. См. Раздел 6.1.2.6.2, "Опции
Плагина Проверки допустимости пароля и Переменные".
Эта функция была добавлена в MySQL 5.6.6.