C# RSA,SSL流-密钥交换

C# RSA,SSL流-密钥交换,c#,openssl,rsa,sslstream,C#,Openssl,Rsa,Sslstream,我正在使用SSLStream使用OpenSSL证书与客户机和服务器通信。 我将使用的客户端是一台有自己软件的机器,它需要使用RSA加密技术。 我制作了一个服务器和一个客户端,只是为了测试,使用我的计算机作为客户端,其他计算机作为服务器,我做了一个简单的密钥交换,只是为了测试这些机器之间的sslstream和de rsa加密。 这两台计算机发送公钥的方式如下: byte[] modulus = pubkey.Modulus; sslStream.Write(modulus, 0, modulus

我正在使用SSLStream使用OpenSSL证书与客户机和服务器通信。

我将使用的客户端是一台有自己软件的机器,它需要使用RSA加密技术。

我制作了一个服务器和一个客户端,只是为了测试,使用我的计算机作为客户端,其他计算机作为服务器,我做了一个简单的密钥交换,只是为了测试这些机器之间的sslstream和de rsa加密。

这两台计算机发送公钥的方式如下:

byte[] modulus = pubkey.Modulus;
sslStream.Write(modulus, 0, modulus.Length);
sslStream.Flush();
 byte[] exponent = {1, 0, 1};
 byte[] modulus = new byte[256];
 sslStream.Read(modulus, 0, modulus.Length);

 clientPublicKey.D = null;
 clientPublicKey.DP = null;
 clientPublicKey.DQ = null;
 clientPublicKey.Exponent = exponent;
 clientPublicKey.InverseQ = null;
 clientPublicKey.Modulus = modulus;
 clientPublicKey.P = null;
 clientPublicKey.Q = null;
两台机器都接收密钥并创建如下内容:

byte[] modulus = pubkey.Modulus;
sslStream.Write(modulus, 0, modulus.Length);
sslStream.Flush();
 byte[] exponent = {1, 0, 1};
 byte[] modulus = new byte[256];
 sslStream.Read(modulus, 0, modulus.Length);

 clientPublicKey.D = null;
 clientPublicKey.DP = null;
 clientPublicKey.DQ = null;
 clientPublicKey.Exponent = exponent;
 clientPublicKey.InverseQ = null;
 clientPublicKey.Modulus = modulus;
 clientPublicKey.P = null;
 clientPublicKey.Q = null;
但是,用我将使用的原始客户机进行测试时,密钥交换的方式不同。

还有别的办法交换钥匙吗?因为我确信原始机器使用另一种方式与我的服务器交换这些密钥。

您所说的“…密钥交换方式不同”是什么意思?协议的每次运行对客户端随机数(nonce)和服务器随机数(nonce)使用不同的值。它被写入了协议。您不应该能够在运行中复制值。我使用2台普通机器发送的方式是使用sslstream,只是对模数进行seinding,但是,我注意到原始机器不是这样工作的