ENCRYPT_TDES或ENCRYPT标量函数

ENCRYPT_TDES函数返回一个值,该值是通过三重DES加密算法对第一个参数进行加密的结果。 该功能还可以设置用于加密的密码。

加密密码也可以使用“加密密码”值进行设置,该值是通过“设置加密密码”语句分配的。

阅读语法图跳过可视化语法图ENCRYPT_TDES( 数据字符串,密码字符串,提示字符串)

该模式是 SYSIBM。

数据字符串
用于返回要加密的字符串值的表达式。 字符串表达式必须返回一个非LOB的内置字符串数据类型。 长度属性必须大于或等于0(零)。 如果指定了提示字符串 ,长度属性限制为32640,如果没有指定提示字符串 ,则限制为32672。

该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。

密码字符串
返回至少6字节且不超过127字节的CHAR或VARCHAR值的表达式。

该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。

该值表示用于加密数据字符串的密码。 如果参数“密码”的值为空或未指定,则使用“加密密码”值对数据进行加密,该值必须由“设置加密密码”语句指定。

提示字符串
一个返回最多32字节的CHAR或VARCHAR值的表达式,用于帮助数据所有者记住密码(例如,Ocean作为提示,帮助记住Pacific)。

该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。

如果指定了提示值,则该提示将嵌入到结果中,并可通过GETHINT函数进行检索。 如果此参数为空或未指定,且在设置加密密码时未指定提示,则结果中不会包含任何提示。 如果未指定密码字符串 ,则可以使用SET ENCRYPTION PASSWORD语句指定提示。

结果的数据类型由第一个参数决定,如下表所示:
表 1. ENCRYPT_TDES函数结果的数据类型
第一个参数的数据类型 结果的数据类型
BINARY 或 VARBINARY VARBINARY
Char、Varchar、Graphic 和 Vargraphic VARCHAR FOR BIT DATA

结果的编码方案与数据字符串的编码方案相同。 如果结果是字符数据,则结果为位数据。

根据是否指定了提示字符串 ,结果的长度属性会有所不同:

  • 如果指定了提示字符串 ,则结果的长度属性为非加密数据的长度属性 + 24 字节 + 到达下一个 8 字节边界所需字节数 + 32 字节(用于提示)。
  • 如果未指定提示字符串 ,则结果的长度属性为非加密数据的长度属性 + 24 字节 + 到达下一个 8 字节边界所需字节数。

结果可以为空;如果第一个参数为空,则结果为空值。

加密后的结果比数据字符串值更长。 因此,在分配加密值时,请确保目标声明的长度能够包含整个加密值。

注意

数据加密注意事项:
密码保护
为了防止无意中访问加密密码,请不要在程序、过程或函数的源代码中将密码字符串指定为常量字符串。 请使用 SET ENCRYPTION PASSWORD 语句或变量。
加密算法:
使用的内部加密算法是带有填充的三重DES密码块链接(CBC)。 128位密钥是通过 MD5 散列算法从密码中提取的。
加密密码和数据
您有责任管理好密码。 数据加密后,只有用于加密的密码才能用于解密。 如果用于解密数据的密码与用于加密数据的密码不同,则解密结果将与原始字符串不符。 没有错误或警告信息。 如果CHAR变量用于设置密码值,则可能用空格填充。 加密后的结果可能包含空终止符和其他不可打印字符。
表的列定义
在定义包含加密数据的列和类型时,请始终按以下方式计算长度属性:
  • 对于带有嵌入提示的加密数据,列长度应为非加密数据的长度属性+24字节+到下一个8字节边界所需的字节数+32字节(用于提示)。
  • 对于没有嵌入提示的加密数据,列长度应为非加密数据的长度属性+24字节+到下一个8字节边界所需的字节数。
以下是一些假设未嵌入提示的列长度计算示例:
Maximum length of non-encrypted data           6 bytes
24 bytes for encryption key                   24 bytes
Number of bytes to the next 8 byte boundary    2 bytes
                                             ---------

Encrypted data column length                  32 bytes
Maximum length of non-encrypted data          32 bytes
24 bytes for encryption key                   24 bytes
Number of bytes to the next 8 byte boundary    0 bytes
                                             ---------

Encrypted data column length                  56 bytes
加密数据的管理
加密数据只能在支持使用三重DES加密算法加密数据的服务器上解密。 因此,加密数据的列复制只能用于支持解密功能和相同加密算法的服务器。
语法替代方案:
ENCRYPT是ENCRYPT_TDES的同义词。 Db2 支持此关键字,以便与 系列中的其他产品兼容。 Db2

示例

示例 1:
对表格中填写的社会保险号码进行加密。 将“加密密码”值设置为“ Ben123 ”,并将其作为密码。
   SET ENCRYPTION PASSWORD ='Ben123';
   INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES ('289-46-8832');
示例 2:
对表格中填写的社会保险号码进行加密。 请明确指定“ Ben123 ”作为加密密码。
INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES ('289-46-8832','Ben123');
示例 3
对表格中填写的社会保险号码进行加密。 将“Pacific”作为加密密码,并提供“Ocean”作为提示,帮助用户记住“Pacific”的密码。
INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES ('289-46-8832','Pacific','Ocean');
前面的语句返回一个双精度浮点数,近似值为 31.62。