Функции шифрования
Эти функции реализуют шифрование и расшифрование данных с использованием алгоритма AES (Advanced Encryption Standard).
Длина ключа зависит от режима шифрования: 16, 24 и 32 байта для режимов -128-, -196- и -256- соответственно.
Длина вектора инициализации всегда составляет 16 байт (байты сверх 16 игнорируются).
HMAC
Добавлено в v25.12
Вычисляет HMAC (код аутентификации сообщения, основанный на хешировании) для заданного сообщения с использованием указанного алгоритма хеширования и секретного ключа.
Поддерживаемые алгоритмы хеширования:
- RSA-MD4 (псевдонимы: MD4, RSA-MD4)
- RSA-MD5 (псевдонимы: MD5, RSA-MD5)
- RSA-MDC2 (псевдонимы: MDC2, RSA-MDC2)
- RSA-RIPEMD160 (псевдонимы: RIPEMD160, RSA-RIPEMD160)
- RSA-SHA1 (псевдонимы: RSA-SHA1, SHA1)
- RSA-SHA1-2 (псевдонимы: RSA-SHA1, RSA-SHA1-2)
- RSA-SHA224 (псевдонимы: RSA-SHA224, SHA224)
- RSA-SHA256 (псевдонимы: RSA-SHA256, SHA256)
- RSA-SHA3-224 (псевдонимы: RSA-SHA3-224, SHA3-224)
- RSA-SHA3-256 (псевдонимы: RSA-SHA3-256, SHA3-256)
- RSA-SHA3-384 (псевдонимы: RSA-SHA3-384, SHA3-384)
- RSA-SHA3-512 (псевдонимы: RSA-SHA3-512, SHA3-512)
- RSA-SHA384 (псевдонимы: RSA-SHA384, SHA384)
- RSA-SHA512 (псевдонимы: RSA-SHA512, SHA512)
- RSA-SHA512/224 (псевдонимы: RSA-SHA512/224, SHA512-224)
- RSA-SHA512/256 (псевдонимы: RSA-SHA512/256, SHA512-256)
- RSA-SM3 (псевдонимы: RSA-SM3, SM3)
- blake2b512
- blake2s256
- id-rsassa-pkcs1-v1_5-with-sha3-224 (псевдонимы: SHA3-224, id-rsassa-pkcs1-v1_5-with-sha3-224)
- id-rsassa-pkcs1-v1_5-with-sha3-256 (псевдонимы: SHA3-256, id-rsassa-pkcs1-v1_5-with-sha3-256)
- id-rsassa-pkcs1-v1_5-with-sha3-384 (псевдонимы: SHA3-384, id-rsassa-pkcs1-v1_5-with-sha3-384)
- id-rsassa-pkcs1-v1_5-with-sha3-512 (псевдонимы: SHA3-512, id-rsassa-pkcs1-v1_5-with-sha3-512)
- md4
- md4WithRSAEncryption (псевдонимы: MD4, md4WithRSAEncryption)
- md5
- md5-sha1
- md5WithRSAEncryption (псевдонимы: MD5, md5WithRSAEncryption)
- mdc2
- mdc2WithRSA (псевдонимы: MDC2, mdc2WithRSA)
- ripemd (псевдонимы: RIPEMD160, ripemd)
- ripemd160
- ripemd160WithRSA (псевдонимы: RIPEMD160, ripemd160WithRSA)
- rmd160 (псевдонимы: RIPEMD160, rmd160)
- sha1
- sha1WithRSAEncryption (псевдонимы: SHA1, sha1WithRSAEncryption)
- sha224
- sha224WithRSAEncryption (псевдонимы: SHA224, sha224WithRSAEncryption)
- sha256
- sha256WithRSAEncryption (псевдонимы: SHA256, sha256WithRSAEncryption)
- sha3-224
- sha3-256
- sha3-384
- sha3-512
- sha384
- sha384WithRSAEncryption (псевдонимы: SHA384, sha384WithRSAEncryption)
- sha512
- sha512-224
- sha512-224WithRSAEncryption (псевдонимы: SHA512-224, sha512-224WithRSAEncryption)
- sha512-256
- sha512-256WithRSAEncryption (псевдонимы: SHA512-256, sha512-256WithRSAEncryption)
- sha512WithRSAEncryption (псевдонимы: SHA512, sha512WithRSAEncryption)
- shake128
- shake256
- sm3
- sm3WithRSAEncryption (псевдонимы: SM3, sm3WithRSAEncryption)
- ssl3-md5 (псевдонимы: MD5, ssl3-md5)
- ssl3-sha1 (псевдонимы: SHA1, ssl3-sha1)
- whirlpool
Синтаксис
Аргументы
mode— Имя алгоритма хеширования (регистронезависимое). Поддерживаются: md5, sha1, sha224, sha256, sha384, sha512.Stringmessage— Сообщение, для которого вычисляется код аутентификации.Stringkey— Секретный ключ для HMAC.String
Возвращаемое значение
Возвращает бинарную строку, содержащую дайджест HMAC. String
Примеры
Простейший HMAC-SHA256
Разные алгоритмы хеширования
Режим без учета регистра
aes_decrypt_mysql
Появилась в версии v20.12
Расшифровывает данные, зашифрованные функцией MySQL AES_ENCRYPT.
Для одинаковых входных данных возвращает тот же открытый текст, что и decrypt.
Если key или iv длиннее, чем должны быть, aes_decrypt_mysql ведет себя так же, как функция MySQL [aes_decrypt]: «сворачивает» key и игнорирует лишние биты iv.
Поддерживает следующие режимы расшифрования:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-cfb128
- aes-128-ofb, aes-192-ofb, aes-256-ofb
Синтаксис
Аргументы
mode— режим расшифровки.Stringciphertext— зашифрованный текст, который нужно расшифровать.Stringkey— ключ расшифровки.Stringiv— необязательный параметр. Вектор инициализации.String
Возвращаемое значение
Возвращает расшифрованное значение типа String. String
Примеры
Расшифровка данных MySQL
aes_encrypt_mysql
Появилась в версии: v20.12
Шифрует текст тем же способом, что и функция MySQL AES_ENCRYPT.
Полученный шифротекст может быть расшифрован функцией MySQL AES_DECRYPT.
При тех же входных данных выдаёт тот же шифротекст, что и функция encrypt.
Когда key или iv длиннее, чем обычно требуется, aes_encrypt_mysql ведёт себя так же, как MySQL aes_encrypt, то есть «сворачивает» key и игнорирует лишние биты iv.
Поддерживаемые режимы шифрования:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
Синтаксис
Аргументы
mode— Режим шифрования.Stringplaintext— Текст, подлежащий шифрованию.Stringkey— Ключ шифрования. Если ключ длиннее, чем требуется дляmode, выполняется специфическая для MySQL свёртка ключа (key folding).Stringiv— Необязательный параметр. Вектор инициализации. Учитываются только первые 16 байт.String
Возвращаемое значение
Бинарная строка зашифрованного текста. String
Примеры
Сравнение одинаковых входных данных
Сбой Encrypt при слишком длинном ключе
Совместимость с MySQL
Более длинный IV приводит к тому же результату
decrypt
Впервые представлена в: v20.12
Эта функция расшифровывает двоичную строку, зашифрованную с помощью AES, с использованием следующих режимов:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
- aes-128-gcm, aes-192-gcm, aes-256-gcm
- aes-128-ctr, aes-192-ctr, aes-256-ctr
- aes-128-cfb, aes-128-cfb1, aes-128-cfb8
Синтаксис
Аргументы
mode— режим расшифровки.Stringciphertext— зашифрованный текст, который необходимо расшифровать.Stringkey— ключ для расшифровки.Stringiv— вектор инициализации. Обязателен для режимов-gcm, для остальных — необязателен.Stringaad— дополнительные аутентифицированные данные. Расшифровка не произойдёт, если это значение неверно. Работает только в режимах-gcm, для остальных генерируется исключение.String
Возвращаемое значение
Возвращает расшифрованный открытый текст. String
Примеры
Правильная расшифровка зашифрованных данных
Неверная расшифровка зашифрованных данных
encrypt
Добавлена в версии: v20.12
Шифрует открытый текст в шифртекст с использованием AES в одном из следующих режимов:
- aes-128-ecb, aes-192-ecb, aes-256-ecb
- aes-128-cbc, aes-192-cbc, aes-256-cbc
- aes-128-ofb, aes-192-ofb, aes-256-ofb
- aes-128-gcm, aes-192-gcm, aes-256-gcm
- aes-128-ctr, aes-192-ctr, aes-256-ctr
- aes-128-cfb, aes-128-cfb1, aes-128-cfb8
Синтаксис
Аргументы
mode— режим шифрования.Stringplaintext— текст, который нужно зашифровать.Stringkey— ключ шифрования.Stringiv— вектор инициализации. Обязателен для режимов-gcm, для остальных — необязателен.Stringaad— дополнительные аутентифицированные данные. Они не шифруются, но влияют на расшифровку. Работает только в режимах-gcm, для остальных генерируется исключение.String
Возвращаемое значение
Возвращает бинарную строку с зашифрованными данными (ciphertext). String
Примеры
Пример шифрования
Пример для режима GCM
tryDecrypt
Добавлена в: v22.10
Аналогична функции decrypt, но возвращает NULL, если расшифровка не удалась при использовании неправильного ключа.
Синтаксис
Аргументы
mode— Режим расшифровки.Stringciphertext— Зашифрованный текст, который нужно расшифровать.Stringkey— Ключ для расшифровки.Stringiv— Необязательный параметр. Вектор инициализации. Обязателен для режимов-gcm, необязателен для остальных режимов.Stringaad— Необязательный параметр. Дополнительные аутентифицируемые данные. Расшифровка не будет выполнена, если это значение неверно. Работает только в режимах-gcm, для других режимов выбрасывается исключение.String
Возвращаемое значение
Возвращает расшифрованный String или NULL, если расшифровка не удалась. Nullable(String)
Примеры
Создание таблицы и вставка данных