计算加密的数据的存储需求

LENGTH 函数提供了直接地计算加密的数据的存储需求的便捷方式:

EXECUTE FUNCTION LENGTH(ENCRYPT_TDES("1234567890123456", "simple password"));
这返回 55
EXECUTE FUNCTION LENGTH(ENCRYPT_TDES("1234567890123456", "simple password", 
        "12345678901234567890123456789012"));
这返回 107
EXECUTE FUNCTION LENGTH(ENCRYPT_AES("1234567890123456", "simple password"));
这返回 67
EXECUTE FUNCTION LENGTH(ENCRYPT_AES("1234567890123456", "simple password", 
        "12345678901234567890123456789012"));
这返回 119
加密的数据所需的存储大小受三个因素的影响:
  • N,明文中字节数
  • 是否提供提示
  • 您使用哪一个加密函数(ENCRYPT_TDES 还是 ENCRYPT_TDES
下列公式描述四种可能的情况,且未简化:
  • 通过不带提示的 ENCRYPT_TDES( ) 来加密:
    加密后的大小 = (4 x ((8 x((N + 8)/8) + 10)/3) + 11)
  • 通过不带提示的 ENCRYPT_AES( ) 来加密:
    加密后的大小 = (4 x ((16 x((N + 16)/16) + 10)/3) + 11)
  • 通过带有提示的 ENCRYPT_TDES( ) 来加密:
    加密后的大小 = (4 x ((8 x((N + 8)/8) + 50)/3) + 11)
  • 通过带有提示的 ENCRYPT_AES( ) 来加密:
    加密后的大小 = (4 x ((16 x((N + 16)/16) + 50)/3) + 11)
整除(/)返回整数商,并丢弃任何余数。
对于选定的 N 的值的范围,基于这些公式,下列表格展示加密后的大小(以字节计):
N 不带提示的 ENCRYPT_TDES 不带提示的 ENCRYPT_AES 带有提示的 ENCRYPT_TDES 带有提示的 ENCRYPT_AES
1 至 7 35 43 87 99
8 至 15 43 43 99 99
16 至 23 55 67 107 119
24 至 31 67 67 119 119
32 至 39 75 87 131 139
40 至 47 87 87 139 139
100 163 171 215 227
200 299 299 355 355
500 695 707 747 759

如果列大小小于由加密函数返回的数据大小,则当插入加密后的值时,会截断它。在此情况下,不可能加密数据,因为头部会提示该长度应长于该列包含的数据值。

然而,这些公式以及由 LENGTH 函数返回的值表明在下一示例中的表模式可存储 16 位信用卡号的加密的形式(带有提示)。