1
服務器認證之後,使用OpenSSL的證書:
的RSACryptoServiceProvider,SSLStream(OpenSSL的) - 加密,解密
sslStream.AuthenticateAsClient(serverName);
的數據加密,在客戶端側是由這個碼由:
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);
的數據通過一個SSLStream,像這樣:
sslStream.Write(messageRSA);
sslStream.Flush();
而服務器將接收到的數據:
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);
當它試圖解密,我得到一個CryptographicException
,消息是Invalid Data
。
問題是,我真的需要使用相同的公鑰來解密這些數據嗎?
如果是的話,我該如何將此密鑰傳遞給服務器端,並正確解密信息?