Перейти к содержимому
Последнее обновление

AES_ENCRYPT

Описание​

Функция шифрования AES. Эта функция работает так же, как функция AES_ENCRYPT в MySQL. По умолчанию используется алгоритм AES_128_ECB и режим дополнения PKCS7.

Функция AES_ENCRYPT не использует переданный ключ напрямую, а выполняет его дополнительную обработку. Этапы обработки:

  1. Количество байт в ключе определяется используемым алгоритмом шифрования. Например, при использовании алгоритма AES_128_ECB количество байт в ключе равно 128 / 8 = 16 (при использовании алгоритма AES_256_ECB количество байт в ключе равно 256 / 8 = 32);
  2. Затем для ключа, введённого пользователем, выполняется операция XOR между i-м и 16*k+i-м байтами. Если длина введённого пользователем ключа меньше 16 байт, в конец добавляется 0.
  3. Наконец, для шифрования используется полученный ключ;

Синтаксис​

AES_ENCRYPT( <str>, <key_str>[, <init_vector>][, <encryption_mode>])

Параметры​

ПараметрОписание
<str>Текст для шифрования
<key_str>Ключ. Обратите внимание, что ключ задаётся строкой в соответствующей кодировке, а не шестнадцатеричной записью. Например, при шифровании с 128-битным ключом длина key_str должна быть равна 16. Если длина ключа недостаточна, используется дополнение нулями до требуемой длины. Если длина превышает требуемую, итоговый ключ вычисляется с помощью циклического XOR. Например, если алгоритм использует 128-битный ключ key, то key[i] = key_str[i] ^ key_str[i+128] ^ key_str[i+256] ^ ...
<init_vector>Вектор инициализации, используемый в алгоритме. Применяется только для определённых алгоритмов. Если не указан, Doris использует встроенный вектор
<encryption_mode>Алгоритм шифрования. Допустимые значения указаны в переменных

Возвращаемое значение​

Возвращает зашифрованные двоичные данные

Примеры​

Использование алгоритма AES_128_ECB

set block_encryption_mode='';
select to_base64(aes_encrypt('text','F3229A0B371ED2D9441B830D21A390C3'));
+----------------------------------------------------------+
| to_base64(aes_encrypt('text', '***', '', 'AES_128_ECB')) |
+----------------------------------------------------------+
| wr2JEDVXzL9+2XtRhgIloA== |
+----------------------------------------------------------+

Использование алгоритма AES_256_CBC

set block_encryption_mode="AES_256_CBC";
select to_base64(aes_encrypt('text','F3229A0B371ED2D9441B830D21A390C3'));
+----------------------------------------------------------+
| to_base64(aes_encrypt('text', '***', '', 'AES_256_CBC')) |
+----------------------------------------------------------+
| 3dym0E7/+1zbrLIaBVNHSw== |
+----------------------------------------------------------+

Использование алгоритма AES_256_CBC с заданным вектором инициализации

select to_base64(aes_encrypt('text','F3229A0B371ED2D9441B830D21A390C3', '0123456789'));
+--------------------------------------------------------------------+
| to_base64(aes_encrypt('text', '***', '0123456789', 'AES_256_CBC')) |
+--------------------------------------------------------------------+
| tsmK1HzbpnEdR2//WhO+MA== |
+--------------------------------------------------------------------+