DECRYPT_BINARY、DECRYPT_BIT、DECRYPT_CHAR和DECRYPT_DB标量函数
解密功能返回一个值,该值是解密加密数据的结果。 解密功能只能解密使用ENCRYPT_TDES函数加密的值。
该模式是 SYSIBM。
用于解密的密码可以是密码字符串值 ,也可以是加密密码值,该值由SET ENCRYPTION PASSWORD语句指定。
- encrypted-data
- 返回CHAR FOR BIT DATA、VARCHAR FOR BIT DATA、BINARY或VARBINARY数据类型的完整加密数据值的表达式。 数据字符串必须使用ENCRYPT_TDES函数加密。 长度属性必须大于或等于0(零)且小于或等于32672。
- 密码字符串
- 返回至少6字节且不超过127字节的CHAR或VARCHAR值的表达式。 此表达式必须与加密数据时使用的密码相同,否则解密后的值将与原始加密值不同。 为了提高安全性, 密码字符串应使用主机变量而非字符串常量来指定。 如果密码参数的值为空或未提供,则将使用加密密码值解密数据,该值必须由SET ENCRYPTION PASSWORD语句指定。
对于静态 SQL 语句,建议使用主机变量而不是字符串常量来指定密码。
- DEFAULT
- 使用加密密码值对数据进行解密,该值必须由SET ENCRYPTION PASSWORD语句分配。
- ccsid-constant
- 一个整数常量,用于指定解密函数应返回数据的CCSID。 如果指定了 DECRYPT_BIT 或 DECRYPT_BINARY,则不能指定 ccsid-constant。 缺省设置为“
- 对于包含静态SQL语句的本机SQL程序,计划或包的编码绑定选项或CREATE PROCEDURE或ALTER PROCEDURE语句的应用编码方案选项
- 应用程序编码特殊寄存器对动态SQL语句的价值
| 函数 | 第一个参数的类型 | 加密数据的实际类型 | 结果 |
|---|---|---|---|
| DECRYPT_BINARY | 用于二进制位数据 1、二进制、可变二进制 | 任何字符串(LOB除外) | VARBINARY |
| 解密位 | 用于二进制、变长二进制数据 | CHAR 或 VARCHAR | VARCHAR FOR BIT DATA |
| 解密位 | 用于二进制、变长二进制数据 | 图形、VARGRAPHIC ( UTF16 ) | 警告或错误 如果返回警告,结果为VARCHAR FOR BIT DATA |
| 解密位 | 用于二进制、变长二进制数据 | 图形、VARGRAPHIC(非 UTF16 ) | 警告或错误 如果返回警告,结果为VARCHAR FOR BIT DATA |
| 解密位 | 用于二进制、变长二进制数据 | BINARY 或 VARBINARY | 警告或错误 如果返回警告,结果为VARCHAR FOR BIT DATA |
| DECRYPT_CHAR | 用于二进制、变长二进制数据 | CHAR 或 VARCHAR | VARCHAR(3) |
| DECRYPT_CHAR | 用于二进制、变长二进制数据 | 图形、VARGRAPHIC ( UTF16 ) | VARCHAR(3) |
| DECRYPT_CHAR | 用于二进制、变长二进制数据 | 图形、VARGRAPHIC(非 UTF16 ) | 警告或错误 如果返回警告,结果为VARCHAR(3) |
| DECRYPT_CHAR | 用于二进制、变长二进制数据 | BINARY 或 VARBINARY | 警告或错误 如果返回警告,结果为VARCHAR(3) |
| 解密数据库 | 用于二进制、变长二进制数据 | Char、Varchar、Graphic 和 Vargraphic | VARGRAPHIC |
| 解密数据库 | 用于二进制、变长二进制数据 | BINARY 或 VARBINARY | 警告或错误 如果返回警告,结果为VARGRAPHIC |
- 对于位数据,表示字符或可变字符 对于位数据
如果 encrypted-data 包含提示,则该函数不会返回此提示。 结果的“长度”属性为加密数据的长度属性减去8个字节。 函数返回的实际值长度与加密的原始字符串长度一致。 如果 encrypted-data 包含加密字符串之外的字节,那么该函数不会返回这些字节。
加密数据的管理 :解密功能只能解密使用三重DES加密算法加密的数据。 因此,如果使用三重DES加密算法加密了数据,则只有在复制后才能使用加密数据列。
如果使用与原始加密值不同的 CCSID 对数据进行解密,则在将解密值转换为该 CCSID 时可能会发生扩展。 在这种情况下,在执行解密功能之前,必须先将加密数据值转换为具有更大字节数的VARCHAR字符串。
结果可以为空;如果第一个参数为空,则结果为空值。
有关使用解密功能的更多信息,请参阅 ENCRYPT_TDES或ENCRYPT标量函数和 GETHINT标量函数。
密码保护 :为了防止无意中访问加密密码,请不要在源代码中指定密码字符串为常量。 请使用加密密码特殊寄存器或使用主机变量指定密码。
SET ENCRYPTION PASSWORD ='Ben123';
INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES('289-46-8832');
SELECT DECRYPT_CHAR(SSN) FROM EMP;这个例子返回的值为“289-46-8832”。
SELECT DECRYPT_CHAR(SSN,'Ben123') FROM EMP;这个例子返回的值为“289-46-8832”。
SET ENCRYPTION PASSWORD ='Ben123';
INSERT INTO EMP(SSN) VALUES ENCRYPT_TDES('289-46-8832');
SELECT DECRYPT_CHAR(SSN) FROM EMP; SELECT DECRYPT_CHAR(CAST(SSN AS VARCHAR(57)),
'Ben123',1208)
FROM EMP;在第一种情况下,如果数据没有转换为更长的值,结果就是VARCHAR(11)值。 在第二种情况下,为了便于扩展,SSN的地址为 VARCHAR(57)
(11 * 3 + 24)。 将数据转换为更长的值,可使正常VARCHAR(11)结果扩展三倍。 三次扩展通常与ASCII或EBCDIC到Unicode UTF-8 转换的最坏情况有关。 在这个例子中,两种情况的结果都是VARCHAR(11)值“289-46-8832”。
