AES_DECRYPT()
AES_DECRYPT(crypt_str, key_str[, init_vector])使用 AES 解密密文并返回VARCHAR明文;加密模式由会话变量block_encryption_mode选择,必须 与加密时使用的模式一致(默认aes-128-ecb;aes-256-cbc需要 16 字节 IV)。
函数说明
AES_DECRYPT() 使用 AES 以 key_str 解密 crypt_str 并返回 VARCHAR
明文。加密模式由会话变量 block_encryption_mode
选择,必须与生成 crypt_str 时使用的模式一致。
MatrixOne 目前支持两种模式:
aes-128-ecb(默认)。密钥派生为 16 字节;忽略可选的init_vector参数。aes-256-cbc。密钥派生为 32 字节;init_vector参数为必填,且长度至 少 16 字节,必须与加密时使用的 IV 一致。
以下情况下函数返回 NULL:
crypt_str或key_str为NULL。block_encryption_mode设置为不支持的值。- 选择了 CBC 模式但 IV 缺失、为
NULL或长度不足 16 字节。 - 密钥派生或底层 AES 操作失败(密钥错误、密文被篡改或填充错误)。
函数语法
> AES_DECRYPT(crypt_str, key_str)
> AES_DECRYPT(crypt_str, key_str, init_vector)
参数释义
| 参数 | 说明 |
|---|---|
| crypt_str | 必填。要解密的密文。接受 BLOB、VARCHAR、CHAR 或 TEXT。 |
| key_str | 必填。生成 crypt_str 时使用的加密密钥。 |
| init_vector | 可选。初始化向量,当 block_encryption_mode 选择 CBC 模式时为必填。 |
示例
mysql> SET block_encryption_mode = 'aes-128-ecb';
mysql> SELECT AES_DECRYPT(AES_ENCRYPT('MatrixOne', 'my-secret-key'), 'my-secret-key');
+--------------------------------------------------------------------------+
| aes_decrypt(aes_encrypt(matrixone, my-secret-key), my-secret-key) |
+--------------------------------------------------------------------------+
| MatrixOne |
+--------------------------------------------------------------------------+