Как создать двунаправленный зашифрованный поток поверх основного .NET Stream?

У меня есть поток, который передает и принимает данные по незащищенному каналу. У меня есть общий секрет, который уже есть на обеих конечных точках канала (скажем, кодовая фраза).

Я хотел бы создать новый поток, используя секрет и исходный небезопасный поток. Я столкнулся с двумя проблемами:

  • CryptoStream односторонний: только для чтения или только для записи. Я могу создать два потока (поток чтения и записи) поверх моего исходного потока, но это недопустимо. Нужно ли мне писать поток-оболочку, чтобы получить то, что я хочу? (а именно, один поток чтения / записи)

  • CryptoStream, как говорят, работает в блоках и не может ничего записывать в базовый поток, пока блок не будет завершен. В идеале я хотел бы записать любой объем данных и немедленно отправить их в основной поток (зашифрованный).

Есть ли простой способ добиться этого? Я знаю о SslStream, но он ориентирован на закрытые / открытые ключи и сертификаты, а не на предварительно общие секреты.

8
задан Roman Starkov 16 July 2011 в 12:28
поделиться