有人可以解释C#CngKey.Import吗?

时间:2018-06-14 11:56:34

标签: c# security encryption cng

我使用软件ksp中的主密钥使用Always Encrypted加密数据库。

密钥是用CngKey.Create创建的,我也可以导出它,但是之后我就卡住了。使用CngKey.Import会创建一个非命名键,这意味着IsEphemeral = true,因此当没有句柄时键会被销毁。

如何将密钥导入为将保留的命名密钥?

最终目标是能够将用作主加密密钥的密钥导出到db,并将其与db备份一起提供给想要使用db的party x。然后,该工具应在第x方机器中重新创建密钥。

2 个答案:

答案 0 :(得分:1)

我相信(基于模糊的回忆和a similar answer)您可以同时进行创建导入,除非它是加密的PKCS#8。

byte[] exported = key.Export(blobType);

将exported和blobType发送到其他地方。

var keyParams = new CngKeyCreationParameters();
// whatever else you want to assign here.

// Add an import to the create step.
keyParams.Properties.Add(new CngProperty(blobType.Format, exported, CngPropertyOptions.None));

CngKey key = CngKey.Create(algorithm, keyName, keyParams);

答案 1 :(得分:0)

CnhKey.Create有一个带名字的重载。

链接文件说:

  

如果提供了keyName,则此重载会创建持久密钥