gpt4 book ai didi

sql-server - 是否可以通过明文类型确定 ENCRYPTBYKEY 最大返回值?

转载 作者:行者123 更新时间:2023-12-04 01:45:10 25 4
gpt4 key购买 nike

我将加密现有表中的几个字段。基本上,将使用以下加密技术:

CREATE MASTER KEY ENCRYPTION
BY PASSWORD = 'sm_long_password@'
GO

CREATE CERTIFICATE CERT_01
WITH SUBJECT = 'CERT_01'
GO

CREATE SYMMETRIC KEY SK_01
WITH ALGORITHM = AES_256 ENCRYPTION
BY CERTIFICATE CERT_01
GO


OPEN SYMMETRIC KEY SK_01 DECRYPTION
BY CERTIFICATE CERT_01

SELECT ENCRYPTBYKEY(KEY_GUID('SK_01'), 'test')

CLOSE SYMMETRIC KEY SK_01

DROP SYMMETRIC KEY SK_01
DROP CERTIFICATE CERT_01
DROP MASTER KEY

ENCRYPTBYKEY返回 varbinary最大大小为 8,000 字节。知道要加密的表字段(例如: nvarchar(128)varchar(31)bigint )如何定义新的 varbinary类型长度?

最佳答案

您可以查看完整规范 here

所以让我们计算一下:

  • 16字节键 UID
  • _4字节头
  • 16字节 IV(对于 AES,一个 16 字节的分组密码)

  • 再加上加密消息的大小:
  • _4字节魔数(Magic Number)
  • _2字节完整性 字节长度
  • _0字节完整性字节(警告:可能被错误地放置在表中)
  • _2字节(明文)消息长度
  • _m字节(明文)消息
  • CBC 填充字节

  • CBC 填充字节应按以下方式计算:
    16 - ((m + 4 + 2 + 2) % 16)

    因为总是应用填充。这将导致 1..16 范围内的填充字节数。一个偷偷摸摸的快捷方式是在总数中添加 16 个字节,但这可能意味着您指定了最多 15 个从未使用过的字节。

    我们可以将其缩短为 36 + 8 + m + 16 - ((m + 8) % 16)60 + m - ((m + 8) % 16 .或者,如果您使用上面指定的小技巧并且您不关心浪费的字节: 76 + m其中 m 是消息输入。

    笔记:
  • 请注意, header 中的第一个字节包含方案的版本号;如果使用不同的内部消息格式或加密方案,此答案不会也不能指定将添加或删除多少字节;
  • 强烈建议使用完整性字节,以防您想保护您的数据库字段不被更改(保持帐户中的金额 secret 性不如确保金额不能更改重要)。
  • 页面上的示例假定文本字符为单字节编码。
  • 关于sql-server - 是否可以通过明文类型确定 ENCRYPTBYKEY 最大返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49363186/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com