RSACryptoServiceProvider
多次调用以创建私钥/公钥对时,我遇到了奇怪的错误问题:
class Program
{
static void Main(string[] args)
{
try
{
CreateKey();
}
catch (Exception e)
{
Console.WriteLine("First failure:"+ e);
}
try
{
CreateKey();
}
catch (Exception e)
{
Console.WriteLine("Second failure:" + e);
}
}
private static void CreateKey()
{
var cp = new CspParameters
{
KeyContainerName = "ContainerKey.1"
};
using (var rsa = new RSACryptoServiceProvider(cp) { PersistKeyInCsp = false })
{
Console.WriteLine(rsa.ToXmlString(true));
Console.WriteLine(rsa.ToXmlString(false));
rsa.Clear();
}
}
}
执行以上代码的输出是(省略我的话):
<RSAKeyValue>[Private key content omitted]</RSAKeyValue>
<RSAKeyValue>[Public key content omitted]</RSAKeyValue>
Second failure:System.Security.Cryptography.CryptographicException: Keyset as registered is invalid.
at System.Security.Cryptography.Utils.CreateProvHandle(CspParameters parameters, Boolean randomKeyContainer)
at System.Security.Cryptography.Utils.GetKeyPairHelper(CspAlgorithmType keyType, CspParameters parameters, Boolean randomKeyContainer, Int32 dwKeySize, SafeProvHandle& safeProvHandle, SafeKeyHandle& safeKeyHandle)
at System.Security.Cryptography.RSACryptoServiceProvider.GetKeyPair()
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(Int32 dwKeySize, CspParameters parameters, Boolean useDefaultKeySize)
at System.Security.Cryptography.RSACryptoServiceProvider..ctor(CspParameters parameters)
at RsaTest.Program.CreateKey() in C:\Users\RF185104\source\repos\RsaTest\RsaTest\Program.cs:line 39
at RsaTest.Program.Main(String[] args) in C:\Users\RF185104\source\repos\RsaTest\RsaTest\Program.cs:line 25
运行上面的代码,第一次调用CreateKey
可以正常工作,但是第二次调用失败。现在,再次重新运行代码时,即使是第一次也失败了,这意味着某些地方仍然存在。但这不应该发生,因为设置PersistKeyInCsp
为false应该可以防止密钥的持久性。更改KeyContainerName
原因会使呼叫再次起作用,但只能起作用一次。然后,下一个呼叫也会失败。
我相信我对RSACryptoServiceProvider
工作原理有很大的误解,因为我不知道上面的错误怎么会发生。
该代码的主要目的是创建一个RSA密钥对,而不将其持久化到本地存储中,因此在同一用户上运行的其他应用程序将无法访问它。
运行Windows 10的.NET Framework 4.7.2在调试和发行中均会发生。
我们的产品在生产中遇到了同样的问题。事实证明,McAfee AntiVirus是造成此问题的原因。它将此消息记录到应用程序事件日志中
username
然process name
,这尝试访问... \应用程序数据\漫游\ MICROSOFT \ CRYPTO \ RSA \Windows SID
\randomish folder name
,违反规则的“恶意软件行为:EFS的Windows滥用”,并被阻止。有关如何响应此事件的信息,请参见KB85494。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句