gpt4 book ai didi

c# - 如何将 CNG key 导入 keystore ?

转载 作者:太空宇宙 更新时间:2023-11-03 12:49:18 24 4
gpt4 key购买 nike

我想导入一个使用 CngKey.Export(CngKeyBlobFormat.EccPrivateBlob) 导出的 key ,为 key 命名,并将其保存在 keystore 中。这应该很简单,但我还没有找到任何方法来做到这一点。

我可以使用 CngKey.Create 创建一个命名 key ,它会保存在 keystore 中,这样我以后就可以通过 CngKey.Open 使用它。如果我使用正确的选项创建它,我可以使用 CngKey.Export 将 key 导出为 EccPrivateBlob 并将其存储在文件中。稍后,我可以从文件中读回这些字节并使用如下调用重新导入 key :

CngKey key = CngKey.Import(keyBytes,
CngKeyBlobFormat.EccPrivateBlob);

这是成功的,但它会生成一个未命名的临时 key 。我如何像使用 Create 一样为 key 提供名称,以便将导入的 key 存储在 keystore 中?
我正在寻找一种方法来存档 ECDsa 签名 key ,然后将其恢复给不同的用户或 PC。我不想每次都将私有(private) blob 放在一边并导入它 -- 我希望管理员只导入一次并将其安全地锁定在 keystore 中。

最佳答案

正如您所说的那样,导入不提供 key 名称,因此它创建了一个临时 key 。您需要做的是调用 CngKey.Create 并在包含私有(private) blob 的 CreationParameters 中提供 CngProperty:

var myKSP = CngProvider.MicrosoftSoftwareKeyStorageProvider;
var blobType = CngKeyBlobFormat.GenericPrivateBlob;
var keyData = Convert.FromBase64String(privateKey);
const bool MachineKey = false;

if (!CngKey.Exists(keyName, myKSP))
{
var keyParams = new CngKeyCreationParameters
{
ExportPolicy = CngExportPolicies.AllowPlaintextExport,
KeyCreationOptions = (MachineKey) ? CngKeyCreationOptions.MachineKey : CngKeyCreationOptions.None,
Provider = myKSP
};
keyParams.Parameters.Add(new CngProperty(blobType.Format, keyData, CngPropertyOptions.None));

var key = CngKey.Create(CngAlgorithm.Rsa, keyName, keyParams);
}

您可以像这样获取私有(private) blob:

var myKSP = CngProvider.MicrosoftSoftwareKeyStorageProvider;
if (CngKey.Exists(keyName, myKSP))
{
var key = CngKey.Open(keyName);
var blobType = CngKeyBlobFormat.GenericPrivateBlob;
var bytes = key.Export(blobType);

return Convert.ToBase64String(bytes);
}

关于c# - 如何将 CNG key 导入 keystore ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36180060/

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