我正在尝试使用Entity Framework 6和数据库项目加密和解密SQL数据库中的某些列。
我创建了我的主密钥:
CREATE COLUMN MASTER KEY [CMK_1]
WITH
(
KEY_STORE_PROVIDER_NAME = N'MSSQL_CERTIFICATE_STORE',
KEY_PATH = N'CurrentUser/my/D4331582F1485517DA1807CF0A5500C........'
)
和我的加密密钥:
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
数据库已成功创建。表和键都存在。
我正在尝试使用实体框架向数据库添加新条目,但我收到此错误:
无法使用以下密钥库解密列密码密钥 提供者:'MSSQL_CERTIFICATE_STORE'。最后10个字节 加密列加密密钥为:'AF-B3-97-27-5A-BC-33-24-75-FA'。 \ R \ nDegumental证书 'D4331582F1485517DA1807C .....'不是'我的' 找到'CurrentUser'位置下的证书商店。
我不知道为什么。
P.S。我在连接字符串中添加了enable参数:
列加密设置=启用;
我在这里遗漏了什么吗?为什么我在.SaveChanges上收到此错误? 一点点解释会非常有帮助! 谢谢!
答案 0 :(得分:1)
经过两天的搜索,我找到了答案。问题在于不知道证书。所以我使用Always Encrypted生成了证书: https://social.technet.microsoft.com/wiki/contents/articles/37979.working-with-the-always-encrypted-feature-in-sql-server-2016.aspx
然后我去了证书管理员并复制了生成的证书的指纹并在生成主密钥时将其粘贴:
KEY_PATH = N'CurrentUser / my / [new_fingerprint]'
它有效。它将始终在我的本地计算机上加密。我试图备份数据库并在另一台机器上使用它。在我导出/导入证书之前,该列已加密。