Последнее обновление
SM4_DECRYPT
Описание
SM4 представляет собой алгоритм симметричного шифрования, принятый в качестве национального стандарта и широко используемый в финансах, связи, электронной коммерции и других областях. Функция SM4_DECRYPT используется для расшифровки данных с помощью SM4. По умолчанию используется алгоритм SM4_128_ECB.
Синтаксис
SM4_DECRYPT( <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> | Для алгоритмов шифрования допустимые значения задаются в переменных |
Возвращаемое значение
Если расшифровка выполнена успешно: возвращаются расшифрованные данные, обычно в виде двоичного представления открытого текста.
Если расшифровка завершилась неудачей: возвращается NULL.
Примеры
Успешная расшифровка
Использование алгоритма по умолчанию
set block_encryption_mode='';
select SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');
+--------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('aDjwRflBrDjhBZIOFNw3Tg=='), '***', '', 'SM4_128_ECB') |
+--------------------------------------------------------------------------------+
| text |
+--------------------------------------------------------------------------------+
Использование алгоритма SM4_128_CBC
set block_encryption_mode="SM4_128_CBC";
select SM4_DECRYPT(FROM_BASE64('FSYstvOmH2cXy7B/072Mug=='),'F3229A0B371ED2D9441B830D21A390C3');
+--------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('FSYstvOmH2cXy7B/072Mug=='), '***', '', 'SM4_128_CBC') |
+--------------------------------------------------------------------------------+
| text |
+--------------------------------------------------------------------------------+
Использование алгоритма SM4_128_CBC и вектора инициализации
select SM4_DECRYPT(FROM_BASE64('1Y4NGIukSbv9OrkZnRD1bQ=='),'F3229A0B371ED2D9441B830D21A390C3', '0123456789');
+------------------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('1Y4NGIukSbv9OrkZnRD1bQ=='), '***', '0123456789', 'SM4_128_CBC') |
+------------------------------------------------------------------------------------------+
| text |
+------------------------------------------------------------------------------------------+
Неудачная расшифровка
set block_encryption_mode='';
select SM4_DECRYPT(FROM_BASE64('aDjwRflBrDjhBZIdOFNw3Tg=='),'F3229A0B371ED2D9441B830D21A390C3');
+---------------------------------------------------------------------------------+
| sm4_decrypt(from_base64('aDjwRflBrDjhBZIdOFNw3Tg=='), '***', '', 'SM4_128_ECB') |
+---------------------------------------------------------------------------------+
| NULL |
+---------------------------------------------------------------------------------+