首批通过分布式安全可靠测评,为关键业务系统打造
DBMS_CRYPTO 概述
更新时间:2026-07-15 22:01:31
DBMS_CRYPTO 系统包提供了基本的加密和解密的函数和存储过程。
功能适用性
该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版仅提供 MySQL 模式。
DBMS_CRYPTO 支持多种行业标准的加密和哈希算法,包括 AES 高级加密标准。AES 已获得 NIST 美国国家标准技术研究院(The National Institute of Standards and Technology )的认可,以取代 DES 数据加密标准(The Data Encryption Standard)。
DBMS_CRYPTO 支持对通用的数据类型进行加密和解密,包括 RAW 和大对象(LOB),例如图像和音频等。此外,DBMS_CRYPTO 还提供了全球化支持,可以在不同字符集的数据库之间进行数据加密与解密工作。
DBMS_CRYPTO 数据类型
DBMS_CRYPTO 子程序的参数所使用的数据类型如下:
| 数据类型 | 描述 |
|---|---|
| BLOB | 源或目标二进制 LOB。 |
| CLOB | 源或目标字符 LOB。 |
| PLS_INTEGER | 指定加密算法类型(与 BLOB、CLOB 和 RAW 数据类型一起使用)。 |
| RAW | 源或目标 RAW 缓冲区。 |
DBMS_CRYPTO 算法
DBMS_CRYPTO 包含预定义的加密算法、密码块链接算法和密码块填充算法。
支持如下加密哈希算法:
名称 描述 HASH_MD4 产生输入消息的 128 位散列或消息摘要。 HASH_MD5 也产生 128 位散列,但比 MD4 更复杂。 HASH_SH1 安全散列算法 (SHA-1)。生成 160 位散列。 HASH_SH256 SHA-2,生成 256 位散列。 HASH_SH384 SHA-2,生成 384 位散列。 HASH_SH512 SHA-2,生成 512 位散列。 HASH_SM3 SM3 密码杂凑算法,生成 256 位散列。 支持如下加密算法:
名称 描述 ENCRYPT_AES128 密码块高级加密标准。使用 128 位密钥。 ENCRYPT_AES192 密码块高级加密标准。使用 192 位密钥。 ENCRYPT_AES256 密码块高级加密标准。使用 256 位密钥。 ENCRYPT_DES 密码块加密标准。使用 56 位的密钥。 ENCRYPT_3DES_2KEY 密码块加密标准。在同一个块上使用 2 个密钥加密 3 次。有效密钥长度为 112 位。 ENCRYPT_3DES 密码块加密标准。在同一个块上加密 3 次。 支持如下密码块链接算法:
名称 描述 CHAIN_ECB 电码本模式。将整个明文分成若干段相同的小段,然后对每一小段进行加密。 CHAIN_CBC 密码分组链接模式。先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。 CHAIN_CFB 加密反馈模式。启用加密小于块大小的数据单元。 CHAIN_OFB 输出回馈模式。允许将块密码作为同步流密码运行。与 CFB 类似,不同之处在于前一个输出块的 n 位移动到等待加密的数据队列的最右侧位置。 支持如下密码块填充算法:
名称 描述 PAD_PKCS5 提供的填充算法符合 PKCS#5,即基于密码的密码学标准。 PAD_NONE 提供指定无填充算法的选项。调用者必须确保块大小正确,否则包会返回错误。
DBMS_CRYPTO 使用限制
DBMS_CRYPTO 不直接支持 VARCHAR2 数据类型。在对 VARCHAR2 类型的数据执行加密操作之前,必须将其转换为统一数据库字符集 AL32UTF8,然后将其转换为 RAW 数据类型。完成这些转换后,可以使用 DBMS_CRYPTO 系统包对其进行加密。
DBMS_CRYPTO 子程序概览
下表列出了 OceanBase 数据库当前版本所支持的 DBMS_CRYPTO 子程序和简要描述。