현재 클라이언트가 서버가 제공하는 다양한 서비스를 시작하고 중지 할 수있는 몇 가지 명령을 보낼 수있는 소켓 서버를 구현하려고합니다. 클라이언트와 서버 사이의 통신을 확보하고 클라이언트가 보내는 명령에 응답하도록 서버를 가져 왔습니다. 다음 단계는 클라이언트와 서버 간의 통신을 암호화하는 것입니다. RSACryptoServiceProvider를 사용하여이 작업을 수행하려고합니다.C#에서 RSA와 소켓 통신 암호화하기
내가 데이터 enrypt하는 데 사용을 Heres 코드 : 내 명령을 해독하는 데 사용
CspParameters parameter = new CspParameters();
parameter.KeyContainerName = "keycontainer";
rsaProvider = new RSACryptoServiceProvider(parameter);
StreamReader r = new StreamReader(@"C:\tmp\rsakey.xml");
rsaProvider.FromXmlString(r.ReadToEnd());
string command = "server reply goes here";
ASCIIEncoding bc = new ASCIIEncoding();
byte[] cmd = rsaProvider.Encrypt(bc.GetBytes(command), false);
handler.Send(cmd);
그리고 heres는 코드를
rsaProvider = new RSACryptoServiceProvider(parameter);
StreamReader r = new StreamReader(@"C:\tmp\rsakey.xml");
string xml = r.ReadToEnd();
rsaProvider.FromXmlString(xml);
ASCIIEncoding bc = new ASCIIEncoding();
string test = bc.GetString(state.buffer);
byte[] tmp = rsaProvider.Decrypt(bc.GetBytes(test), false);
나는 노력 직접 내가 그들을 암호화 된 후 내 문자열을 해독하고, 그것은 작동합니다. 그러나 클라이언트에서 서버 또는 그 역으로의 전송은 작동하지 않고 Decrypt 함수는 해독 할 데이터가 모듈의 최대 값을 초과한다는 예외를 throw합니다.
클라이언트와 서버 간의 트래픽을 암호화하는 올바른 방법은 무엇입니까?
올바른 방법은 SSL을 사용하는 것입니다. –