代码之家  ›  专栏  ›  技术社区  ›  Ubiquitous Che

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

  •  0
  • Ubiquitous Che  · 技术社区  · 16 年前

    转载自 http://www.mentalis.org/forum/thread.qpx/971 因为我需要一个答案。我希望你们能帮我。

    讨论的部分是组织。精神病。安全服务。dll。


    大家好。我有麻烦了。

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

    StackTrace:

    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>
    

    我不得不从一个客户发给我的截图上手工复制那个异常跟踪。

    基本上,我创造了一个。NET 3.5 WinForms XP应用程序,它使用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 回复  |  直到 16 年前
        1
  •  0
  •   John Deters    16 年前

    你知道你的客户的电脑上是否安装了CSP吗?旧版本的Windows不会安装某些CSP。也有可能他们运行的是不支持强加密的外国版本的Windows(我认为法国版本可能不允许所有这些)

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

        2
  •  0
  •   Rasmus Faber    16 年前

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

    您是否在多个线程(或多个进程)中创建密钥?很可能你在锁定文件时遇到了一些问题。

    推荐文章