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

Can someone explain C# CngKey.Import please?

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

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

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

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

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

链接文件说:

If keyName is provided, this overload creates a persisted key

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

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

将导出的和 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);