将导出的 CngKey 导入到 RSA 并再次导出
Importing exported CngKey to RSA and exporting it again
我以 CngKeyBlobFormat.Pkcs8PrivateBlob
格式导出密钥,然后尝试将此信息导入到新的 CngKey 中,然后再次尝试导出新密钥。问题是,当您简单地使用 CngKey.Import()
导入密钥时,您无法选择参数,也无法选择密钥的名称,因此我无法再次导出它,因为默认参数不允许您这样做。所以我写了下面的代码:
// Import key into RSACng rsa
var key = rsa.Key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
CngProvider cp = new CngProvider("NewProvider");
CngKeyCreationParameters ckcp = new CngKeyCreationParameters() { ExportPolicy=CngExportPolicies.AllowPlaintextExport, Provider=cp};
ckcp.Parameters.Add(new CngProperty(CngKeyBlobFormat.Pkcs8PrivateBlob.Format, key, CngPropertyOptions.None));
CngKey cngKey2 = CngKey.Create(CngAlgorithm.Rsa, "OldKey", ckcp);
RSACng rsa2 = new RSACng(cngKey2);
var exportedKey = rsa2.Key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
// exportedKey.Equals(key) == true
我在 CngKey.Create
上遇到错误:
System.Security.Cryptography.CryptographicException: 'Unknown error "-1073741275".
奇怪,报未知错误。该值为 STATUS_NOT_FOUND
("The object was not found.").
最有可能的问题是您没有名为 "NewProvider"
的注册提供商。这不是它要求的密钥容器的名称,而是它应该将密钥发送到的库。
99% 的时间你想要 CngProvider.MicrosoftSoftwareKeyStorageProvider
。 1% 的时间你想要 CngProvider.MicrosoftSmartCardKeyStorageProvider
。几乎无法估量你想要一些其他价值。
我以 CngKeyBlobFormat.Pkcs8PrivateBlob
格式导出密钥,然后尝试将此信息导入到新的 CngKey 中,然后再次尝试导出新密钥。问题是,当您简单地使用 CngKey.Import()
导入密钥时,您无法选择参数,也无法选择密钥的名称,因此我无法再次导出它,因为默认参数不允许您这样做。所以我写了下面的代码:
// Import key into RSACng rsa
var key = rsa.Key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
CngProvider cp = new CngProvider("NewProvider");
CngKeyCreationParameters ckcp = new CngKeyCreationParameters() { ExportPolicy=CngExportPolicies.AllowPlaintextExport, Provider=cp};
ckcp.Parameters.Add(new CngProperty(CngKeyBlobFormat.Pkcs8PrivateBlob.Format, key, CngPropertyOptions.None));
CngKey cngKey2 = CngKey.Create(CngAlgorithm.Rsa, "OldKey", ckcp);
RSACng rsa2 = new RSACng(cngKey2);
var exportedKey = rsa2.Key.Export(CngKeyBlobFormat.Pkcs8PrivateBlob);
// exportedKey.Equals(key) == true
我在 CngKey.Create
上遇到错误:
System.Security.Cryptography.CryptographicException: 'Unknown error "-1073741275".
奇怪,报未知错误。该值为 STATUS_NOT_FOUND
("The object was not found.").
最有可能的问题是您没有名为 "NewProvider"
的注册提供商。这不是它要求的密钥容器的名称,而是它应该将密钥发送到的库。
99% 的时间你想要 CngProvider.MicrosoftSoftwareKeyStorageProvider
。 1% 的时间你想要 CngProvider.MicrosoftSmartCardKeyStorageProvider
。几乎无法估量你想要一些其他价值。