Skip to content

适用虚谷数据库版本

v12.10.8



适用虚谷数据库版本

v12.10.8


AES_DECRYPT

📄字数 1.5K
👁️阅读量 加载中...

功能描述

使用 AES(Advanced Encryption Standard) 算法对加密数据进行解密,支持与加密时对应的加密模式、初始化向量(IV)及密钥派生函数(如 HKDF、PBKDF2_HMAC),需与 AES_ENCRYPT 函数的加密参数完全匹配才能正确解密。

提示

  • MySQLAES_DECRYPT 函数相比,本函数的解密模式(如 aes-128-ecb)通过参数直接指定,而非依赖系统变量,且需显式传入与加密时一致的密钥派生参数(盐值、迭代次数等)。
  • 最小参数为 2 个(待解密数据和原始密钥),此时解密模式默认使用 aes-128-ecb(需与加密时模式一致)。

语法格式

sql
AES_DECRYPT(cipher_str, key_str[, mode][, iv][, kdf][, kdf_param1][, kdf_param2])

输入参数

  • cipher_str:待解密的加密数据(通常为 AES_ENCRYPT 的输出结果,或其十六进制形式经 UNHEX 转换后的值),支持 VARCHAR 类型或能隐式转换为 VARCHAR 类型的值。
  • key_str: 与加密时一致的原始密钥(用于派生或直接作为解密密钥)。VARCHAR 类型。
  • mode:解密模式,需与加密时完全一致,支持 aes-128/192/256-ecb/cbc/ofb/cfb,默认值为 aes-128-ecbVARCHAR 类型。
  • iv:初始化向量,需与加密时完全一致(长度和值均匹配)。ECB 模式无需 IV,可省略。VARCHAR 类型。
  • kdf:密钥派生函数,需与加密时完全一致,支持 hkdfpbkdf2_hmacVARCHAR 类型。
  • kdf_param1:密钥派生函数的第一个参数,需与加密时完全一致;VARCHAR 类型:
    • kdf=hkdf:表示盐值(与加密时的盐值相同);
    • kdf=pbkdf2_hmac:表示盐值(与加密时的盐值相同)。
  • kdf_param2:密钥派生函数的第二个参数,需与加密时完全一致;VARCHAR 类型。:
    • kdf=hkdf:表示上下文信息(与加密时的信息相同);
    • kdf=pbkdf2_hmac:表示迭代次数(与加密时的次数相同,正整数)。

注意

  • 解密成功的核心是 所有参数必须与加密时完全一致(包括模式、IV、密钥派生函数及参数),否则会产生乱码或者报错。
  • 若加密数据以十六进制字符串形式存储(如示例中用 HEX 转换的结果),解密前需用 UNHEX 函数将其转换为二进制数据,再传入 AES_DECRYPT

输出结果

  • 类型:VARCHAR(原始明文数据),若任意必选参数为 NULL,返回 NULL;否则返回解密后的原始明文数据。

执行类型

TYPEVALUE说明
NATIVE0函数只能在本地计算
VOLATI0函数的每次计算值不同
STABLE0函数的每次计算值相同
COMPUTE0函数支持预计算取值
NOT_CONST0函数不支持转常数
HAVE_DEF0函数参数有默认值

示例

sql
示例1:
-- 基础解密
SELECT AES_DECRYPT(UNHEX('50E009FBB13B4E324292E01BFE0F7FAF'), 'secret_key') FROM dual;

+----------------------------------+
|            EXPR1                 |
+----------------------------------+
| test                             |
+----------------------------------+

示例2:
-- HKDF密钥派生解密
SELECT AES_DECRYPT(UNHEX('43C95D4B524DF410CB0024EBCC54C250'), 'key', 'aes-128-ecb', '0123456789123456', 'hkdf', 'salt123', 'info456') FROM dual;

+----------------------------------+
|            EXPR1                 |
+----------------------------------+
| test                             |
+----------------------------------+

示例3:
-- 使用与加密时一致的 `pbkdf2_hmac` 派生参数:
SELECT AES_DECRYPT(UNHEX('F9AEEE1B566860CA30E1EC087CDD8B07'), 'key', 'aes-128-ecb', '0123456789123456', 'pbkdf2_hmac', 'salt123', 10000) FROM dual;

+----------------------------------+
|            EXPR1                 |
+----------------------------------+
| test                             |
+----------------------------------+