使用Cryptography Block在IIS下运行出现的的问题

  使用Enterprise Library 已经很久了,之前1.1版本的企业库里所有的程序块都使用到了,也都没有出现任何问题。2.0版的还没有完全使用,由于项目需要对数据进行加密,使用到了加密程序块。很快对它的使用接口进行一次封装,单元测试也都是通过。但是在真正使用到Web App的时候却出现了问题,对数据进行加密时抛出异常,“System.Security.Cryptography.CryptographicException: 该项不适于在指定状态下使用”,提示在下面这段代码的地方出错。
Line 78:         public virtual byte[] Unprotect()
Line 
79:         {
Line 
80:             return ProtectedData.Unprotect(protectedKey, null, protectionScope);
Line 
81:         }
起初怀疑是应用程序块的一个BUG,但经过它与执行Web App的系统用户有关。相同的代码用Dev Server运行不会出现任何的问题,但一放在IIS中马上就出错。Dev Server默认是用
Administrator用户运行的,而且用普通的本地应用程序和单元测试程序都不会出错,唯有在IIS运行的Web App会出错,也尝试过把应用程序池的用户改成本地系统和本地服务都不行。DotNet加密类进行数据加密前进行什么样的操作需要与当前用户有关?而使用 密钥与当前用户息息相关的DPAPI加密,却不会出现任何问题?一个下午了,就为这一个问题我花了一整个下午的时间,还没有解决,在网上没有找到更多相关的资料,有,也都是擦边而过。晕死。
原文地址:https://www.cnblogs.com/hjf1223/p/368645.html