gpt4 book ai didi

c# - .Net 4.6.2 上的 RSACryptoServiceProvider "Key does not exist"

转载 作者:太空狗 更新时间:2023-10-30 00:38:28 24 4
gpt4 key购买 nike

我正在使用 PackageDigitalSignatureManager 对 Zip 文件及其内容进行签名。我的代码运行良好,直到我突然更新到 .Net 4.6.2,我得到以下预期:

System.Security.Cryptography.CryptographicException: Key does not exist 
bei System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
bei System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
bei System.Security.Cryptography.RSACryptoServiceProvider.SignHash(Byte[] rgbHash, Int32 calgHash)
bei System.Security.Cryptography.RSAPKCS1SignatureFormatter.CreateSignature(Byte[] rgbHash)
bei System.Security.Cryptography.AsymmetricSignatureFormatter.CreateSignature(HashAlgorithm hash)
bei System.Security.Cryptography.Xml.SignedXml.ComputeSignature()
bei MS.Internal.IO.Packaging.XmlDigitalSignatureProcessor.Sign(IEnumerable`1 parts, IEnumerable`1 relationshipSelectors, X509Certificate2 signer, String signatureId, Boolean embedCertificate, IEnumerable`1 signatureObjects, IEnumerable`1 objectReferences)
bei System.IO.Packaging.PackageDigitalSignatureManager.Sign(IEnumerable`1 parts, X509Certificate certificate, IEnumerable`1 relationshipSelectors, String signatureId, IEnumerable`1 signatureObjects, IEnumerable`1 objectReferences)
bei System.IO.Packaging.PackageDigitalSignatureManager.Sign(IEnumerable`1 parts, X509Certificate certificate, IEnumerable`1 relationshipSelectors, String signatureId)
bei System.IO.Packaging.PackageDigitalSignatureManager.Sign(IEnumerable`1 parts, X509Certificate certificate, IEnumerable`1 relationshipSelectors)

我使用的证书和私钥以及我使用的签名代码在过去几个月里没有任何变化。唯一的变化是切换到 .Net 4.6.2。

在找到这篇文章之前,我不确定发生了什么:https://blogs.msdn.microsoft.com/dotnet/2016/08/02/announcing-net-framework-4-6-2/他们提到更改证书和签名代码,但我不确定到底是什么损坏了。

有人知道我该如何解决这个问题吗?有没有办法以向后兼容的方式运行我的应用程序?

最佳答案

创建 RSACryptoServiceProvider 的实例时,您需要指定一个具有指定 KeyContainerName 的 CspParameters 对象:

var cp = new CspParameters();
cp.KeyContainerName = "WhateverKeyContainerName";
var privateKey = new RSACryptoServiceProvider(cp);

关于c# - .Net 4.6.2 上的 RSACryptoServiceProvider "Key does not exist",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40894549/

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