我已经制作了这段代码
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私钥是正确读取的。 提前谢谢大家。
答案 0 :(得分:0)
解决方案是将new SHA384CryptoServiceProvider()
替换为"SHA384"
我还发现这是与Visual Studio 2012相关的问题。
答案 1 :(得分:0)
有一个处理SHA256的MSDN博客:
它解释说你无法传递SHA256CryptoServiceProvider,但是:
第二个参数应该是字符串“SHA256”,类型为 SHA256Managed对象,或SHA256Managed对象的实例。
...指的是“红色”和“绿色”模型,(http://blogs.msdn.com/b/somasegar/archive/2006/05/18/601354.aspx)。