我有一個服務器(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