ENCRYPT_AES 函数

ENCRYPT_AES 函数返回一个对它的第一个参数应用 AES(“高级加密标准”)算法而得到的加密的值,该参数必须是未加密的字符表达式或智能大对象(即,BLOB 或 CLOB 数据类型)。如果使用显式的或缺省的 hint,则字符参数的长度可达到 32640 字节,或如果未指定提示(或 NULL 提示),则长度可达到 32672 字节。BLOB 或 CLOB 参数的理论大小限制比之大许多数量级,但实际的限制可能由您的硬件或由加密和解密所需的时间所强加。

您必须指定 password 作为它的第二个参数,除非 SET ENCRYPTION 语句已指定了 session password,如果您省略第二个参数,则数据库服务器以其作为缺省值。如果已设置了 session password,则您指定的任何 password 覆盖此函数调用的返回值的 session password。对于返回的加密了的值的任何后续的解密,还需要显式的或缺省的 password。有效的 password 必须有至少 6 字节,但不多于 128。

您可可选地指定 hint 作为第三个参数。如果 SET ENCRYPTION 语句为此会话指定了缺省的 hint,且您未指定提示,则将缺省的 hint 以加密了的形式存储在返回的值之内。您指定的任何 hint 覆盖缺省的 hint。有效的 hint 可不长于 32 字节。您可使用连续的引号('')来指定 NULL hint。如果您指定显式的 hint,则还必须指定显式的 password

hint 的目的是帮助用户记住 password。例如,如果 password 是 "buggy",则您可能定义该提示为 "whip"。这两个字符串都不限定为单个词,但 hint 的大小提供返回的值的大小。如果您随后记不住该 hint,则使用来自 ENCRYPT_AES 的返回的值作为 GETHINT 的参数来检索该 hint

下列示例从 INSERT 语句的 VALUES 子句调用 ENCRYPT_AES,该语句将明文字符串以及 ENCRYPT_AES 从它的 12 字节的第一个参数返回的 encrypted_data 值存储在 tab1 中。在此,SET ENCRYPTION 定义用作 ENCRYPT_AES 函数的缺省的第二个和第三个参数的 session passwordhint
EXEC SQL SET ENCRYPTION PASSWORD 'CHARYBDIS' WITH HINT 'messina';
          EXEC SQL INSERT INTO tab1 VALUES ('abcd', ENCRYPT_AES("111-222-3333"));

当尚未设置 session password 时,如果省略 password 参数,或如果显式的 password 参数的长度短于 6 字节或长于 128 字节,则 ENCRYPT_AES 调用失败并报错。

在某些上下文中,如果加密了的返回值太长以至于接收它的数据类型不能存储,则发出错误。

要获取关于在 GBase 8s 数据库的列值中使用数据加密的附加信息,请参阅 加密和解密函数SET ENCRYPTION PASSWORD 语句