---
title: "AES_ENCRYPT - OceanBase 数据库 V4.2.1 | OceanBase 文档中心"
description: "AES_ENCRYPT 声明 AES_ENCRYPT(str,key_str[,init_vector]) 说明 使用密钥字符串 key_str 对加密字符串进行加密并返回原始明文字符串 str 。 str 没有长度限制，该函数会将 str 自动填充至加密块的整数倍。密文长度的计算公式为： 16 * (trunc(s…"
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.2.1 LTS

# AES_ENCRYPT

更新时间：2026-07-15 20:56:55

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.2.1/zh-CN/700.reference/500.sql-reference/100.sql-syntax/200.common-tenant-of-mysql-mode/400.functions-of-mysql-mode/500.encryption-and-compression-functions-of-mysql-mode/200.aes-encrypt-of-mysql-mode.md)  

## 声明

```sql
AES_ENCRYPT(str,key_str[,init_vector])

```

## 说明

使用密钥字符串 `key_str` 对加密字符串进行加密并返回原始明文字符串 `str`。`str` 没有长度限制，该函数会将 `str` 自动填充至加密块的整数倍。密文长度的计算公式为：

```sql
16 * (trunc(string_length / 16) + 1)

```

如果任一函数参数为 `NULL`，则该函数返回 `NULL`。

`AES_ENCRYPT()`使用官方 AES（Advanced Encryption Standard）算法实现数据的加密。AES 标准允许使用各种密钥长度，默认为 128 位。也可以使用 196 或 256 位的密钥长度。密钥长度越长，安全性越高，但加密速度降低。 AES_ENCRYPT() 与 AES_DECRYPT() 函数可通过初始化向量控制块加密模式：

- `block_encryption_mode` 系统变量用于控制基于块的加密算法的模式。默认值为 `aes-128-ecb`，表示使用 128 位密钥长度和 ECB 模式进行加密。
 - `init_vector` 参数表示初始化向量：

     - 当加密模式需要设置 `init_vector` 参数时，其长度必须是 16 字节及以上（超过 16 的字节将被忽略）。 如果缺少 `init_vector`，则会发生错误。
     - 当加密模式不需要设置 `init_vector` 参数时，则该参数会被忽略。

  对于需要初始化向量的加密模式，加密和解密必须使用相同的向量。

  ```sql
  obclient> SET block_encryption_mode = 'aes-256-cbc';
  obclient> SET @key_str ='My secret passphrase';
  obclient> SET @init_vector = '1111111111111111';
  obclient> SET @crypt_str = AES_ENCRYPT('text',@key_str,@init_vector);
  obclient> SELECT AES_DECRYPT(@crypt_str,@key_str,@init_vector);
  +-----------------------------------------------+
  | AES_DECRYPT(@crypt_str,@key_str,@init_vector) |
  +-----------------------------------------------+
  | text                                          |
  +-----------------------------------------------+
  1 row in set

  ```

  下表列出了块加密模式、支持的 SSL 库以及是否需要初始化向量参数的详细信息。

  | 块加密模式 | 支持的 SSL 库 | 是否需要初始化向量 |
  | --- | --- | --- |
  | ECB | OpenSSL | 否 |
  | CBC | OpenSSL | 是 |
  | CFB1 | OpenSSL | 是 |
  | CFB8 | OpenSSL | 是 |
  | CFB128 | OpenSSL | 是 |
  | OFB | OpenSSL | 是 |

## 示例

- 将 `'hello world'` 加密，密钥为 `'key'`，加密后的串保存于 `@pass` 中。

  ```sql
  obclient> SET @pass=AES_ENCRYPT('hello world', 'key','1111111111111111');
  Query OK, 0 rows affected

  ```
 - 查看加密后串的长度（都为 2 的整数次方）。

  ```sql
  obclient> SELECT CHAR_LENGTH(@pass);
  +--------------------+
  | CHAR_LENGTH(@pass) |
  +--------------------+
  |                 16 |
  +--------------------+
  1 row in set

  ```
 - 使用 `AES_DECRYPT()` 解密。

  ```sql
  obclient> SELECT AES_DECRYPT(@pass, 'key');
  ERROR 1582 (42000): Incorrect parameter count
  obclient> SELECT AES_DECRYPT(@pass, 'key','1111111111111111');
  +----------------------------------------------+
  | AES_DECRYPT(@pass, 'key','1111111111111111') |
  +----------------------------------------------+
  | hello world                                  |
  +----------------------------------------------+
  1 row in set

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
