- 类别:
TRY_DECRYPT¶
DECRYPT 的特殊版本,如果在解密过程中发生错误,它会返回 NULL 值。
语法¶
TRY_DECRYPT( <value_to_decrypt> , <passphrase> ,
[ [ <additional_authenticated_data> , ] <encryption_method> ]
)
实参¶
必填:
value_to_decrypt
要解密的 BINARY 值。
passphrase
用于加密/解密数据的加密短语。加密短语是 VARCHAR。
可选:
additional_authenticated_data
经过身份验证的额外数据 (AAD) 是在解密过程中机密性和真实性都有保证的附加数据。然而,此 AAD 未加密,并且不作为字段包含在 ENCRYPT 或者 ENCRYPT_RAW 函数的返回值中。
如果 AAD 被传递给加密函数(ENCRYPT 或 ENCRYPT_RAW),那么相同的 AAD 也必须传递给解密函数(DECRYPT 或者 DECRYPT_RAW)。如果传递给解密函数的 AAD 与 AAD 不匹配,则解密失败。
AAD 和
passphrase
之间的区别是密码短语旨在保密(否则,加密实际上毫无价值),而 AAD 可以保持公开。AAD 有助于验证公共信息和加密值是否相互关联。ENCRYPT 函数中的示例部分包括一个示例,展示了 AAD 匹配与不匹配时的行为。对于 ENCRYPT_RAW 和 DECRYPT_RAW,AAD 的数据类型应为 BINARY。对于 ENCRYPT 和 DECRYPT,AAD 的数据类型可以是 VARCHAR 或者 BINARY,并且不需要匹配加密值的数据类型。
AAD 仅支持启用 AEAD 的加密模式,例如 GCM(默认)。
encryption_method
该字符串指定用于加密/解密数据的方法。该字符串包含子字段:
<algorithm>-<mode> [ /pad: <padding> ]
algorithm
目前仅限于:'AES'
:传递加密短语时(例如,传递至 ENCRYPT),该函数会使用 AES-256 加密(256 位)。传递密钥时(例如,传递至 ENCRYPT_RAW),该函数使用 128、192 或 256 位加密,具体取决于密钥长度。
algorithm
不区分大小写。mode
指定应使用哪种分组密码模式来加密消息。下表显示了哪些模式受支持,以及其中哪些模式支持填充:模式
填充
描述
'ECB'
是
使用密钥单独加密每个分组。通常不鼓励使用此模式,包含此模式只是为了与外部实现兼容。
'CBC'
是
加密后的分组是与前一个分组 XORed。
'GCM'
否
Galois/Counter 模式是一种启用了 AEAD 的高性能加密模式。AEAD 通过生成一个额外的 AEAD 标签来确保加密数据的真实性和机密性。而且,AEAD 支持 AAD(经过身份验证的额外数据)。
'CTR'
否
计数器模式。
'OFB'
否
输出反馈。密文是附带块纯文本的 XORed。
'CFB'
否
密码反馈由 OFB 和 CBC 组成。
mode
不区分大小写。padding
指定如何填充长度不是块大小倍数的消息。填充仅适用于 ECB 和 CBC 模式;对于其他模式,填充将被忽略。填充的可能值为:'PKCS'
:将 PKCS5 用于块填充。'NONE'
:无填充。用户在使用 ECB 或者 CBC 模式时需要注意填充。
padding
不区分大小写。默认设置:
'AES-GCM'
。如果未指定
mode
,则会使用 GCM。如果未指定
padding
,则会使用 PKCS。
返回¶
如果解密过程中发生任何运行时错误,则以 BINARY 值或 NULL 值形式返回解密值。
使用说明和示例¶
有关使用说明和示例,请参阅 DECRYPT 函数。