c# - 使用 Entity Framework 在 sql server 中加密/解密列

标签 c# sql-server entity-framework encryption ssms

我正在尝试使用 Entity Framework 6 和数据库项目对 SQL 数据库中的某些列进行加密和解密。

我创建了我的主 key :

CREATE COLUMN MASTER KEY [CMK_1]
WITH
(
    KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
    KEY_PATH = N'CurrentUser/my/D4331582F1485517DA1807CF0A5500C........'
)

和我的加密 key :

CREATE COLUMN ENCRYPTION KEY [CEK_1]
WITH VALUES
(
     COLUMN_MASTER_KEY = [CMK_1],
     ALGORITHM = N'RSA_OAEP',
     ENCRYPTED_VALUE = 0x016E00000163007500....
);

而 mt 表是:

CREATE TABLE [dbo].[MyWords]
(
    [Id] INT NOT NULL PRIMARY KEY IDENTITY,
    [MyWord] [NVARCHAR](4) COLLATE Latin1_General_BIN2 ENCRYPTED WITH(ENCRYPTION_TYPE = DETERMINISTIC, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256', COLUMN_ENCRYPTION_KEY = [CEK_1]) NOT NULL,
)
GO

数据库创建成功。表和键都存在。

我正在尝试使用 Entity Framework 向数据库添加一个新条目,但出现此错误:

Failed to decrypt a column cipher key using the following key store provider: 'MSSQL_CERTIFICATE_STORE'. The last 10 bytes of the encrypted column encryption key are: 'AF-B3-97-27-5A-BC-33-24-75-FA'. \ R \ nDegumental certificate 'D4331582F1485517DA1807C.....' was not in the 'My' certificate store under the location 'CurrentUser' found.

我不知道为什么。

附言我在连接字符串中添加了启用参数:

Column Encryption Setting = Enabled;

我是不是漏掉了什么?为什么我在 .SaveChanges 上收到此错误? 一点解释会很有帮助! 谢谢!

最佳答案

经过两天的寻找,我找到了答案。问题在于不知道证书。所以我使用 Always Encrypted 生成了证书: https://social.technet.microsoft.com/wiki/contents/articles/37979.working-with-the-always-encrypted-feature-in-sql-server-2016.aspx

然后我去了证书管理器并复制了生成的证书的指纹并在生成主 key 时粘贴它:

KEY_PATH = N'CurrentUser/my/[new_fingerprint]'

并且有效。它将始终在我的本地计算机上加密。我试图备份数据库并在另一台机器上使用它。在我导出/导入证书之前,该列已加密。

关于c# - 使用 Entity Framework 在 sql server 中加密/解密列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49278117/

相关文章:

sql-server - SSIS 设计器 Visual Studio 外键集成

c# - 在三层项目中放置 DTO/POCO

c# - 连接到 Oracle 服务器时找不到文件 'C:\SomePath\Oracle.DataAccess.Common.Configuration.Section.xsd'

c# - 在 EF Code First 中, Foo 是否可以拥有 Bars 集合以及 "FavouriteBar"?

mysql - "INSERT INTO .. ON DUPLICATE KEY UPDATE"只插入新条目而不替换?

sql-server - 存储总数或即时计算?

javascript - 在 JavaScript 中操作数据时是否应该避免使用 C# 中的十进制类型

c# - C# 中的 var - 为什么它不能用作成员变量?

c# - 如何使用 LINQ 从数据库中选择多个项目

c# - 如何将字符串解析为 BigInteger?