博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Asp.net页面的编码格式引起的"密钥集不存在"错误
阅读量:6496 次
发布时间:2019-06-24

本文共 1673 字,大约阅读时间需要 5 分钟。

"密钥集不存在 ",英文"Keyset does not exist"

堆栈跟踪:

at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)    at System.Security.Cryptography.SafeProvHandle._FreeCSP(IntPtr pProvCtx)    at System.Security.Cryptography.SafeProvHandle.ReleaseHandle()   at System.Runtime.InteropServices.SafeHandle.InternalFinalize()    at System.Runtime.InteropServices.SafeHandle.Dispose(Boolean disposing)    at System.Runtime.InteropServices.SafeHandle.Finalize()

这通常是因为我们使用微软的非对称加密类"RSACryptoServiceProvider ",同时我们又启用了IIS的模拟用户造成的。(对称加密不会出现这种错误,因为Keyset是对非对称加密而言的,也就是我们说的“公钥”和“私钥”的统称)

具体原因:

1、我们以模拟用户身份使用了RSACryptoServiceProvider

2、我们没有调用RSA的clear方法,释放掉密钥集

3、当GC进行垃圾回收时,并不是以模拟身份运行的,通常是Network Service帐号下,于是没有了上下文或者没有了访问权限

4、总而言之,就出了这个错

 解决方法:

每次加密或解密后,调用RSACryptoServiceProvider 的clear方法就好了。

网上好像还有一种方法:

赋予Network Service(也可能是别的)帐号对文件夹“C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA"的完全访问权限。

 

--------------------------------------------------历史分割线-----------------------------------------

以下我碰到的情况可能只有对我自己有用, 我想大多数人不会碰到:

Google"密钥集不存在"错误的解决方案不能解决我的问题。此错误是一个未处理的异常,然而用户代码无法捕捉此异常,只能通过事件查看器观察到。此错误着实让我的团队困扰了几天,因为如果出现此错误,必将引起Web服务器进程w3wp.exe意外关闭,然后重新启动,造成的结果是Session很快过期,进程结束,Session变量当然不复存在。

事件ID1334、5000、4096有规律的依次发生。

客户电话不断打来,只好换回以前的备份,结果此错误消失。问题肯定是最近的程序修改造成的,然而仔细对照程序代码,没有发现任何问题。

无意间想到了编码格式,因为有很多莫名其妙的问题都是文件的编码格式造成的。用记事本打开最近修改的一个文件a.aspx,“文件另存为”,发现是ANSI格式,然而其他文件都是Utf-8格式,忽然想起在修改a.aspx文件时,是从Utf-8文件中复制了一段代码到a.aspx中。这样会不会造成IIS异常发生?

 

于是将文件保存为UTF-8编码格式,然后复制代码,发布后问题解决,错误没有再次出现。然而这种错误平常很少出现,都是UTF-8格式的,出现了可能也不在意,只是简单的归结于RP问题。希望对遇到相同问题的朋友有所帮助。

警示:一段文本用肉眼看不出有什么区别,但是它是带有编码格式的。

 

转载于:https://www.cnblogs.com/slmk/archive/2011/11/16/2250646.html

你可能感兴趣的文章
晨跑【最小费用最大流】
查看>>
景点中心 C组模拟赛
查看>>
iOS国际化(多语言设置)
查看>>
bzoj 2733 平衡树启发式合并
查看>>
sublime简书安装配置
查看>>
爱上MVC~Web.Config的Debug和Release版本介绍
查看>>
【转】那些年我们一起清除过的浮动
查看>>
python__高级 : 动态添加 对象属性, 类属性, 对象实例方法, 类静态方法, 类方法...
查看>>
【每天一道算法题】时间复杂度为O(n)的排序
查看>>
NLog的介绍使用
查看>>
Haproxy+Rabbitmq中的问题
查看>>
字符串变量小议
查看>>
232. Implement Queue using Stacks
查看>>
Poj(1469),二分图最大匹配
查看>>
和菜鸟一起学linux之V4L2摄像头应用流程【转】
查看>>
spin_lock、spin_lock_irq、spin_lock_irqsave区别【转】
查看>>
删除 mac 垃圾桶内清除不掉的文件
查看>>
【响应式编程的思维艺术】 (5)Angular中Rxjs的应用示例
查看>>
/bin/bash^M: bad interpreter: No such file or dire
查看>>
python xml rpc
查看>>