C# RSACryptServiceProvider,SSLStream(OpenSSL)-加密、解密

C# RSACryptServiceProvider,SSLStream(OpenSSL)-加密、解密,c#,cryptography,rsa,C#,Cryptography,Rsa,服务器身份验证后,使用openssl证书: 客户端的数据加密由以下代码进行: string messsage = "teste123.<EOF>"; byte[] messageRSA = ConvertByte.GetBytes(messsage); RSACryptoServiceProvider asr = new RSACryptoServiceProvider(2048); var publicKey = asr.ExportPara

服务器身份验证后,使用openssl证书:

客户端的数据加密由以下代码进行:

    string messsage = "teste123.<EOF>";

    byte[] messageRSA = ConvertByte.GetBytes(messsage);

    RSACryptoServiceProvider asr = new RSACryptoServiceProvider(2048);

    var publicKey = asr.ExportParameters(false);

    var csp = new RSACryptoServiceProvider();

    csp.ImportParameters(publicKey);

    messageRSA = csp.Encrypt(messageRSA, false);

服务器将接收数据。:

byte[] bytes = new byte[2048];
bytes = sslStream.Read(buffer, 0, buffer.Length);

我创建了一个方法来清理缓冲区,因为有了“2048”大小,我会有很多不需要的“0”值,用这个方法我会清理所有不需要的零。

RSACryptoServiceProvider asr = new RSACryptoServiceProvider(2048);
var privateKey = asr.ExportParameters(true);
var csp = new RSACryptoServiceProvider();
csp.ImportParameters(privateKey);
decryptedMessage = FixBuffer(buffer);//method that cleans the buffer, and return a valid array, just with the information that i want.
decryptedMessage= csp.Decrypt(decryptedMessage, false);

当它试图解密时,我得到一个
加密异常
,消息是
无效数据


问题是,我真的需要在客户端使用相同的公钥和私钥来解密这些数据吗?

如果是,如何将此密钥传递到服务器端,并正确解密信息?

要解密数据,您当然需要使用与用于加密数据的公钥相对应的私钥。目前,您正在服务器上生成一个新的(不同的)密钥,该密钥将无法用于解密数据。至于如何将正确的密钥传递给服务器,答案是您没有——服务器应该生成密钥,并将公共部分(仅)发送给客户端,然后它可以使用该部分对消息进行加密

尽管如此,考虑到通信已经通过加密的SSL连接进行,似乎根本不需要加密数据

byte[] bytes = new byte[2048];
bytes = sslStream.Read(buffer, 0, buffer.Length);
RSACryptoServiceProvider asr = new RSACryptoServiceProvider(2048);
var privateKey = asr.ExportParameters(true);
var csp = new RSACryptoServiceProvider();
csp.ImportParameters(privateKey);
decryptedMessage = FixBuffer(buffer);//method that cleans the buffer, and return a valid array, just with the information that i want.
decryptedMessage= csp.Decrypt(decryptedMessage, false);