CryptographicException:无法获取加密服务提供程序上下文

时间:2009-09-23 20:53:29

标签: c# winforms encryption cryptography

http://www.mentalis.org/forum/thread.qpx/971重新发帖,因为我需要一个答案。我希望你们能帮助我。

有问题的组件是Org.Mentalis.SecurityServices.dll。


嘿所有人。我遇到了麻烦。

CryptographicException:无法获取加密服务提供程序上下文。

堆栈跟踪:

at Org.Mentalis.SecurityServices.Cryptography.CryptoHandle.CreateInternalHandle(IntPtr handle, String container)
at ORG.Mentalis.SecurityServices.Cryptography.CryptoHandle.get_Handle()
at Org.Mentalis.SecurityServices.Cryptography.RC4CryptoServiceProvider.ctor()
at <place in my app where I try to create the RC4 CryptoServiceProvider>

我必须从客户发送给我的屏幕截图中手动复制该异常跟踪。

基本上,我已经为XP创建了一个.NET 3.5 WinForms应用程序,该应用程序使用RC4CryptoServiceProvider在启动时从.ini文件加载加密的用户详细信息。它已经好几个月了。

大约一周前,我在计算机上收到了这个确切的异常消息。我在网上做了一些狩猎,但找不到太多 - 我发现的一切与网站有关。

我最终偶然发现了一个让我的计算机上运行正常的解决方法。当我从以下三个文件夹中删除文件时:

C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ MachineKeys \

C:\ Documents and Settings \ All Users \ Application Data \ Microsoft \ Crypto \ RSA \ token \

C:\ Documents and Settings \ my_username \ Application Data \ Microsoft \ Crypto \ RSA \ token \

问题消失了。下次运行应用程序时,文件夹会重新填充新信息。

我原本以为这只是我自己的开发环境所特有的东西 - 我已经下载了一些奇怪的东西,它破坏了我的加密文件和文件夹。这不是我是专家的领域 - 我只是使用组件,它只是工作。嗯......到现在为止。

问题是,我公司的一个客户刚刚开始遇到同样的错误,我不愿意让他们只是清除他们的加密文件而不能证明原因。此外,这似乎不是因为我下载了一些奇怪的东西,因为这个例外是由一系列商业终端服务器引起的。

我一直在四处寻找这个问题的支持,但我运气不好。我会四处看看。那里的任何人都可以对这种情况有所了解吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:0)

您知道您的客户是否在其计算机上安装了CSP吗?较旧版本的Windows不会安装某些CSP。也有可能他们正在运行不支持强加密的Windows的外国版本(我认为可能不允许使用法语版本。)

另一种可能性是权限。也许运行代码的进程不再以管理权限运行,或者与您的帐户关联的权限已更改。

答案 1 :(得分:0)

在调用CryptAcquireContext时,Mentalis库应该真正设置CRYPT_VERIFYCONTEXT标志。由于它们不是,RC4CryptoServiceProvider的每个实例都会创建一个默认持久密钥容器的句柄(存储在procmon中的文件中)。

您是在多个线程(或多个进程)中创建密钥吗?一个疯狂的猜测是你在锁定文件时遇到了一些问题。