我有一个服务器(python)和一个客户端(c#),我需要在它们之间使用不对称rsa加密临时进行通信。 当我连接到服务器作为客户端时,我向他发送了我的公钥,然后他发给我他的公钥。我在服务器上使用rsa库,然后在那里获得服务器的公钥参数{n,e}我发送这些参数并在它们之间留出空间。我它们分开,并使用此功能的模数转换成一个BigInteger:RSA C#ImportParameters“参数不正确”异常
public static BigInteger GetBigInteger(string number)
{
BigInteger bigNum = new BigInteger();
for (int i = number.Length; i > 0; i--)
{
bigNum *= 10;
bigNum += (int) number[number.Length-i];
}
return bigNum;
}
public static void Connect(IPAddress ipAddress, int port)
{
try
{
string[] message;
byte[] data = new byte[1024];
srvr.Receive(data); //Recieve the server's public key.
int length = int.Parse(Encoding.ASCII.GetString(data.Take(4).ToArray()));
message = Encoding.ASCII.GetString(data.Skip(4).Take(length).ToArray()).Split(' ') ;
RSACryptoServiceProvider RSAserver = new RSACryptoServiceProvider(1024);
RSAParameters par = new RSAParameters();
par.Modulus = GetBigInteger(message[0]).ToByteArray(); // Saves the server's public key.
par.Exponent = new byte[] { 1, 0, 1 }; // Saves the server's public key.
RSAserver.ImportParameters(par);
addresseeKey = RSAserver.ToXmlString(false);
...
}
...
}
抛出异常的ImportParameters行表示:“参数不正确”。 有什么问题?
你应该把你的代码减少到一个最小的例子。你不需要套接字。另请参阅[如何创建最小,完整和可验证示例](https://stackoverflow.com/help/mcve)。 – jww
另请参阅代码项目上的[Cryptographic Interoperability:Keys](https://www.codeproject.com/Articles/25487/Cryptographic-Interoperability-Keys)。它给出了一些*“参数不正确”的例子*,并对其进行了修正。 – jww