Witam, piszę właśnie aplikację serwerową (taką małą bazę danych). Niestety napotkałem mały problem podczas pisania obsługi połączenia szyfrowanego (używam biblioteki Crypto++).

Otóż, gdy klient prześle serwerowi pakiet "rsakey <tutaj_klucz_publiczny_klienta>" serwer rozpoczyna z tymże klientem połączenie szyfrowane (odpowiada oczywiście swoim kluczem publicznym). Gdy klient przesyła zaszyfrowane dane w trakcie takiej właśnie sesji zaszyfrowanej wszystko przebiega ok. Niestety gdy klient podczas połączenia szyfrowanego prześle serwerowi NIEZASZYFROWANE dane (co może się zdarzyć przez jakiś błąd w aplikacji klienta) to wywala mi cały serwer!

Próbowałem zamknąć procedurę deszyfrującą pakiety klienta w bloki try... catch lecz aplikacja nie łapie wyjątku tylko po prostu się wywala. Zna ktoś może jakiś sposób na zapobiegnięcie takiemu wywalaniu się?

Oto kod deszyfrujący pakiet:

std::string DecryptData(const std::string& data)
{
        std::string ret;
	try
	{
		CryptoPP::RSAES_OAEP_SHA_Decryptor decryptor(decryptionKey);

		CryptoPP::StringSource(data, true,
			new CryptoPP::PK_DecryptorFilter(CryptoPP::AutoSeededRandomPool(), decryptor,
				new CryptoPP::StringSink(ret))); 
	}
	catch(...)
	{
		return ""; //Tego wyjątku właśnie nie mogę złapać :(
	}

	return ret;
}