0

我已经制作了这段代码

RSACryptoServiceProvider RSASign = new RSACryptoServiceProvider();
                    StreamReader sr = File.OpenText("PublicPrivate.txt");
                    string myKey = sr.ReadToEnd();
                    sr.Close();

                    RSASign.FromXmlString(myKey);

                    byte[] signature = RSASign.SignData(arr, new SHA384CryptoServiceProvider());

                    string head = "<!>Signature</!>";

                    byte[] headBytes = Encoding.Default.GetBytes(head);

                    byte[] arrayToSend = new byte[headBytes.Length + signature.Length];

                    arrayToSend = headBytes.Concat(signature).ToArray();

                    UserSock.Send(arrayToSend);

我在我的计算机上遇到了这个问题,一切正常,但是当我在另一台计算机上复制 exe 文件时,我在 RSASign.SignData() 函数上收到错误消息。问题是否可能与不同的 .net 框架版本有关。在我的电脑上,我有 4.5 版,我在一些有 3.5 和 4 的电脑上对其进行了测试。否则我不知道应该是什么问题。我确定 RSA 私钥已正确读取。谢谢大家。

4

2 回答 2

0

解决方案是替换new SHA384CryptoServiceProvider()"SHA384" 我还发现这是与 Visual Studio 2012 相关的问题。

于 2013-05-21T15:41:26.520 回答
0

有一个处理 SHA256 的 MSDN 博客:

http://blogs.msdn.com/b/shawnfa/archive/2008/08/25/using-rsacryptoserviceprovider-for-rsa-sha256-signatures.aspx

它解释说您不能传递 SHA256CryptoServiceProvider,但是:

第二个参数应该是字符串“SHA256”、SHA256Managed 对象的类型或 SHA256Managed 对象的实例。

...指的是“红色”和“绿色”模型,(http://blogs.msdn.com/b/somasegar/archive/2006/05/18/601354.aspx)。

于 2014-09-30T17:47:55.333 回答