ENCRYPT_TDES或ENCRYPT标量函数
ENCRYPT_TDES函数返回一个值,该值是通过三重DES加密算法对第一个参数进行加密的结果。 该功能还可以设置用于加密的密码。
加密密码也可以使用“加密密码”值进行设置,该值是通过“设置加密密码”语句分配的。
该模式是 SYSIBM。
- 数据字符串
- 用于返回要加密的字符串值的表达式。 字符串表达式必须返回一个非LOB的内置字符串数据类型。 长度属性必须大于或等于0(零)。 如果指定了提示字符串 ,长度属性限制为32640,如果没有指定提示字符串 ,则限制为32672。
该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。
- 密码字符串
- 返回至少6字节且不超过127字节的CHAR或VARCHAR值的表达式。
该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。
该值表示用于加密数据字符串的密码。 如果参数“密码”的值为空或未指定,则使用“加密密码”值对数据进行加密,该值必须由“设置加密密码”语句指定。
- 提示字符串
- 一个返回最多32字节的CHAR或VARCHAR值的表达式,用于帮助数据所有者记住密码(例如,Ocean作为提示,帮助记住Pacific)。
该参数也可以是数字数据类型。 数字参数将隐式强制转换为 VARCHAR 数据类型。
如果指定了提示值,则该提示将嵌入到结果中,并可通过GETHINT函数进行检索。 如果此参数为空或未指定,且在设置加密密码时未指定提示,则结果中不会包含任何提示。 如果未指定密码字符串 ,则可以使用SET ENCRYPTION PASSWORD语句指定提示。
结果的数据类型由第一个参数决定,如下表所示:
| 第一个参数的数据类型 | 结果的数据类型 |
|---|---|
| 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”的密码。
前面的语句返回一个双精度浮点数,近似值为 31.62。INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES ('289-46-8832','Pacific','Ocean');
