首先让我先说我很抱歉,如果我把这个问题发布在错误的地方。我在Object already exists in RSACryptoServiceProvider看到了这个条目。我尝试了那里提供的解决方案。但是,他们没有解决我的问题。此外,我没有看到重新提问的选项。
我的问题几乎相同。我有一个使用RSACryptoServiceProvider
的类,它在同一台机器上和同一个帐户下的两个项目中运行。两个项目都在同一个解决方案中并共享相同的加密代码。一个项目,即服务器,是Windows服务,另一个是客户端,是Windows应用程序。他们使用RSACryptoServiceProvider
使用非对称加密通过命名管道相互通信。我开始只是让服务器在与客户端相同的应用程序中的另一个Windows窗体中运行。一切都很顺利。然后,我将服务器移动到Windows服务。
Windows服务启动正常。它似乎能够创建它的RSACryptoServiceProvider
罚款的实例。但是,当在Windows应用程序中运行的客户端启动时,它会在尝试创建它时遇到运行时错误。以下是在两个项目中运行的代码。
rule = New CryptoKeyAccessRule("everyone", CryptoKeyRights.FullControl, AccessControlType.Allow)
csp = New CspParameters
csp.KeyContainerName = _KeyContainerName
csp.Flags = CspProviderFlags.UseMachineKeyStore
csp.CryptoKeySecurity = New CryptoKeySecurity()
csp.CryptoKeySecurity.SetAccessRule(rule)
//Object already exists exception happens here
rsa = New RSACryptoServiceProvider(_KeySize, csp)
正如您所看到的,我有一些代码可以设置访问规则,如此主题的另一篇文章所述。不幸的是,这并没有解决我的问题。还有什么需要改变吗?