AES_ENCRYPT
📄字数 1.3K
👁️阅读量 加载中...
功能描述
使用 AES(Advanced Encryption Standard) 算法对输入数据进行加密,支持指定加密模式、初始化向量(IV)及密钥派生函数(如 HKDF、PBKDF2_HMAC)。
提示
- 与
MySQL的AES_ENCRYPT函数相比,本函数的加密模式(如aes-128-ecb)通过第三个参数直接指定,而非依赖系统变量,密钥派生相关参数(盐值、迭代次数等)需显式传入。 - 最小参数为
2个(待加密数据和原始密钥),此时加密模式默认使用aes-128-ecb。
语法格式
sql
AES_ENCRYPT(str, key_str[, mode][, iv][, kdf][, kdf_param1][, kdf_param2])输入参数
str:待加密的原始数据,支持VARCHAR类型或隐式转换为VARCHAR类型的值。key_str:用于派生或直接作为加密的原始密钥。VARCHAR类型。mode:加密模式,支持aes-128/192/256-ecb/cbc/ofb/cfb,默认值为aes-128-ecb。VARCHAR类型。iv:初始化向量,长度需与加密模式匹配(如aes-128-cbc需 16 字节 IV)。ECB模式无需 IV,可省略。VARCHAR类型。kdf:密钥派生函数,支持hkdf(基于 HMAC 的密钥派生)、pbkdf2_hmac(基于密码的密钥派生)。VARCHAR类型。kdf_param1:密钥派生函数的第一个参数,VARCHAR类型:- 若
kdf=hkdf:表示盐值(可选,默认空); - 若
kdf=pbkdf2_hmac:表示盐值(可选,默认空)。
- 若
kdf_param2:密钥派生函数的第二个参数,VARCHAR类型:- 若
kdf=hkdf:表示上下文信息(可选,默认空); - 若
kdf=pbkdf2_hmac:表示迭代次数(正整数,可选,默认1000)。
- 若
输出结果
- 类型:
VARCHAR(二进制数据)。若任意必选参数为NULL,返回NULL;否则返回加密后的二进制数据。
执行类型
| TYPE | VALUE | 说明 |
|---|---|---|
| NATIVE | 0 | 函数只能在本地计算 |
| VOLATI | 0 | 函数的每次计算值不同 |
| STABLE | 0 | 函数的每次计算值相同 |
| COMPUTE | 0 | 函数支持预计算取值 |
| NOT_CONST | 0 | 函数不支持转常数 |
| HAVE_DEF | 0 | 函数参数有默认值 |
示例
sql
示例1:
-- 使用默认的 aes-128-ecb 模式,直接用 key_str 作为密钥:
SELECT HEX(AES_ENCRYPT('test', 'secret_key')) FROM dual;
+----------------------------------+
| EXPR1 |
+----------------------------------+
| 50E009FBB13B4E324292E01BFE0F7FAF |
+----------------------------------+
示例2:
-- 使用 hkdf 派生密钥,配合 aes-128-ecb 模式:
SQL> SELECT HEX(AES_ENCRYPT('test', 'key', 'aes-128-ecb', '0123456789123456', 'hkdf', 'salt123', 'info456')) FROM dual;
+----------------------------------+
| EXPR1 |
+----------------------------------+
| 43C95D4B524DF410CB0024EBCC54C250 |
+----------------------------------+
示例3:
-- 使用aes-128-ecb模式+PBKDF2_HMAC密钥派生
SQL> SELECT HEX(AES_ENCRYPT('test', 'key', 'aes-128-ecb', '0123456789123456', 'pbkdf2_hmac', 'salt123', 10000)) FROM dual;
+----------------------------------+
| EXPR1 |
+----------------------------------+
| F9AEEE1B566860CA30E1EC087CDD8B07 |
+----------------------------------+