加密的存储需求

使用 ENCRYPT_AESENCRYPT_TDES 内建的函数来加密数据。以 BASE64 格式(又称为 Radix-64)来存储字符数据类型的加密的值。对于字符数据,这需要比相应的未加密的数据大得多的存储。省略 hint 可对每一加密的值减少超过 50 字节的开销。留出充足的存储空间供加密的值使用是用户的职责。

下表罗列可加密的数据类型,以及您可用来对那些数据类型的值进行加密和解密的内建的函数:
原始的数据类型 加密的数据类型 BASE64 格式 解密函数
CHAR CHAR DECRYPT_CHAR
NCHAR NCHAR DECRYPT_CHAR
VARCHAR VARCHAR DECRYPT_CHAR
NVARCHAR NVARCHAR DECRYPT_CHAR
LVARCHAR LVARCHAR DECRYPT_CHAR
BLOB BLOB DECRYPT_BINARY
CLOB BLOB DECRYPT_CHAR

您不可加密 IDSSECURITYLABEL 数据类型的列。

如果加密的 VARCHAR(或 NVARCHAR)值长于那些数据类型的最大大小 255 字节,则该加密函数返回有足够大小的 CHAR(或 NCHAR)值来存储加密的值。

DECRYPT_BINARYDECRYPT_CHAR 都从加密的 CHAR、NCHAR、VARCHAR、NVARCHAR 或 LVARCHAR 值返回相同的值。没有内建的加密或解密函数支持 BYTE 或 TEXT 数据类型,但您可使用 BLOB 数据类型来加密每个大型字符串。

Warning: 如果您想要在其中存储加密的数据的数据库列的声明的大小小于加密的数据长度,则当您将加密的数据插入到该列内时会发生截断。被截断的数据不可在后续进行解密,因为在加密的字符串的头部内标明的数据长度与该列存储的不相匹配。要避免发生截断,请确保任何存储加密的字符串的列都有充足的长度。(要了解如何计算加密的字符串长度,请参阅下一段中的交叉引用。)

除了未加密的数据长度之外,对加密的数据需要的存储依赖于编码格式,依赖于您是否指定 hint,以及依赖于加密函数的块大小。要了解估算加密的大小的公式,请参阅 计算加密的数据的存储需求 页上的“计算加密的数据的存储需求”。