win7 64位ComputeSignature(signer)签名出错 本帖最后由 wjmo520 于 2014-06-05 10:25:49 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你是在站点上运行的吗?如果是,IIS设置里有个兼容32位的设置或者编译为64位 你在程序里面加密用的是什么算法?是在CMS类中用SHA-2或AES算法吗?如果是的话,请看"Invalid provider type specified" when using CNG providers with .NET CMS classes。在Vista及以后的系统中(所以在XP上可以运行),用上面的算法需要CNG程序支持,但是.NET还不支持CNG。文章中提供了一个替代解决方案及代码的链接,试一下是否可以解决问题。 好的 我试试 非常感谢支持。还是未能解决问题;;出错代码片段如下: 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 中。其他信息: 该项不适于在指定状态下使用。 你检查一下是不是下面链接中提到的原因,就是在导出pfx的时候没有设置密码,也没有设置X509KeyStorageFlags。如果是的话,页面最后有解决方法RSACryptoServiceProvider error(s)X509KeyStorageFlags flags = X509KeyStorageFlags.Exportable;certWithPubKey = new X509Certificate2(certPath,"password",flags); 有设置密码 就是每次 signedCms.ComputeSignature(cmsSigner, true);的时候就报错 “指定了无效的提供程序类型” 如果代码不涉及保密的话,发一份到邮箱(1913 2707 24,去掉空格后加@qq.com)。可以一起看看能不能解决。 鉴于大家遇到的问题,现把解决方案分享出来 以后不用加本人的Q了 谢谢。1、把私钥以及配置文件放项目根目录下,然后设置IIS应用程序池的高级--把“加载用户配置文件”设置为True (很多人都是这一问题)设置完最好重启下IIS配置。2、启用32位应用程序,如下图3、系统打补丁SP2或者重装系统更多工行接口的内容分享请加入新群:88243946 C# WinForm 遍历控件问题,达人请进,马上送分 Switch嵌套Switch的问题,请高手看下有什么错误? 用CurrencyManager绑定的方式好,还是用BindingSource 方式绑定好呢 如何让滚动条获取焦点? C#Mdi窗体子窗体调用父窗体函数的问题 VS05中C# LISTVEW和TREEVIEW填充问题 大虾,谁做过语音诱导~~~~!帮帮忙啊! 急!!请教一个关于如A+B=A∪B ∪AB此种算法的运算?顶者有分 GDI+画好的线如何擦除(有背景图片) C#中的开方函数是如何? C#如何获取某文件夹路径 高手帮看这个异常
好的 我试试 非常感谢支持。
还是未能解决问题;;
出错代码片段如下: 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 中。
其他信息: 该项不适于在指定状态下使用。
RSACryptoServiceProvider error(s)X509KeyStorageFlags flags = X509KeyStorageFlags.Exportable;
certWithPubKey = new X509Certificate2(certPath,"password",flags);
有设置密码 就是每次 signedCms.ComputeSignature(cmsSigner, true);的时候就报错 “指定了无效的提供程序类型”
1、把私钥以及配置文件放项目根目录下,然后设置IIS应用程序池的高级--把“加载用户配置文件”设置为True (很多人都是这一问题)设置完最好重启下IIS配置。
2、启用32位应用程序,如下图
3、系统打补丁SP2或者重装系统更多工行接口的内容分享请加入新群:88243946