本帖最后由 wjmo520 于 2014-06-05 10:25:49 编辑

解决方案 »

  1.   

    你是在站点上运行的吗?如果是,IIS设置里有个兼容32位的设置或者编译为64位
      

  2.   

    你在程序里面加密用的是什么算法?是在CMS类中用SHA-2或AES算法吗?如果是的话,请看"Invalid provider type specified" when using CNG providers with .NET CMS classes。在Vista及以后的系统中(所以在XP上可以运行),用上面的算法需要CNG程序支持,但是.NET还不支持CNG。文章中提供了一个替代解决方案及代码的链接,试一下是否可以解决问题。
      

  3.   


    好的 我试试 非常感谢支持。
    还是未能解决问题;;
    出错代码片段如下:         X509Certificate2 cert = new X509Certificate2(@"E:\\数字签名\RSA数字签名\testCertificate.pfx", "123");
             RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;
             FileStream fspri = new FileStream("privatekey.txt", FileMode.Create, FileAccess.Write);
                 string keypri = rsa.ToXmlString(true);        //此行中断报错
             fspri.Write(Encoding.UTF8.GetBytes(keypri), 0, keypri.Length);
             fspri.Close();
             fspri.Dispose();  运行出现的错误如下:     
    未处理的“System.Security.Cryptography.CryptographicException”类型的异常出现在 mscorlib.dll 中。
    其他信息: 该项不适于在指定状态下使用。
      

  4.   

    你检查一下是不是下面链接中提到的原因,就是在导出pfx的时候没有设置密码,也没有设置X509KeyStorageFlags。如果是的话,页面最后有解决方法
    RSACryptoServiceProvider error(s)X509KeyStorageFlags flags = X509KeyStorageFlags.Exportable;
    certWithPubKey = new X509Certificate2(certPath,"password",flags);
      

  5.   


    有设置密码 就是每次 signedCms.ComputeSignature(cmsSigner, true);的时候就报错 “指定了无效的提供程序类型”
      

  6.   

    如果代码不涉及保密的话,发一份到邮箱(1913 2707 24,去掉空格后加@qq.com)。可以一起看看能不能解决。
      

  7.   

    鉴于大家遇到的问题,现把解决方案分享出来 以后不用加本人的Q了 谢谢。
    1、把私钥以及配置文件放项目根目录下,然后设置IIS应用程序池的高级--把“加载用户配置文件”设置为True (很多人都是这一问题)设置完最好重启下IIS配置。
    2、启用32位应用程序,如下图
    3、系统打补丁SP2或者重装系统更多工行接口的内容分享请加入新群:88243946