Это продолжение проекта в этом question, но без Bouncy Castle.RSA (шифрование на стороне клиента/расшифровка сервера)
Так что я решил отказаться от Bouncy Castle (жаль, я любил имя)
ИНАЧЕ
У меня есть сервер и клиент. клиенту необходимо отправить сериализованный объект на сервер, тогда сервер обработает этот объект.
Он делает это, однако я бы хотел добавить шифрование в процесс. Но без сохранения файла или чего-либо подобного. процесс должен быть основан на сеансе (в некотором смысле)
Таким образом, клиент запросит ключ с сервера, сервер будет генерировать пару ключей и отправить ключ клиенту.
Клиент затем использует этот ключ для шифрования объекта
string key = ASCIIEncoding.ASCII.GetString(RequestKey(tcpclnt));
var RsaClient =new RSACryptoServiceProvider(2048);
while (key.Length > 0) {
RsaClient.FromXmlString(key);
var transmit = ASCIIEncoding.ASCII.GetBytes(stringtosend);
var encrypted = RsaClient.Encrypt(transmit,false);
сервер затем получает эти зашифрованные байты и пытается расшифровать их
raw = Receive(clientSocket);
byte[] r = TrimBytes(ASCIIEncoding.ASCII.GetBytes(raw),256);
var sdecrypted = ASCIIEncoding.ASCII.GetString(RsaServer.Decrypt(r, false));
Но увы, сервер не может это сделать. При расшифровке он выдает ошибку
Key does not exist.
Итак, мой вопрос: что я делаю неправильно?
Большое спасибо за любую помощь, которую вы можете предложить.
UPDATE
Измененный код на сервере
var RSAKeyInfo = new RSACryptoServiceProvider(2048, new CspParameters(1)).ExportParameters(true);
Новая ошибка
The parameter is incorrect
Имеет ли сервер один и тот же ключ ключа rsaclient cryptoservice? – BugFinder
@BugFinder: Я бы предположил, что он загружает xml, который сервер предоставляет var RsaClient = новый RSACryptoServiceProvider (2048); while (ключ.Length> 0) { RsaClient.FromXmlString (ключ); – Darkestlyrics
Кажется, что он не видит, что ключ для его дешифрования – BugFinder