BinaryReaderとBinaryWriterを使用してstring、int、およびbyte [] メッセージをネットワーク経由で送信するプログラムがあります。
メッセージの順序と内容は、サーバーとクライアントの両方での実行の流れにとって重要ですが、期間が長くなることはありません。
今、私はすべてを暗号化しようとしています。
これは、実際のコードの周りにある新しいラッパーです。
using encReaderStream = CryptoStream(clientStream, myAES.CreateDecryptor(), CryptoStreamMode.Read),\
encWriterStream = CryptoStream(clientStream, myAES.CreateEncryptor(), CryptoStreamMode.Write),\
enc_reader = BinaryReader(encReaderStream),\
enc_writer = BinaryWriter(encWriterStream):
....
この例は boo コードですが、この例では直感的に C# と同等である必要があります。
ここで起こることは、サーバーが最初の暗号化されたメッセージを で正しく取得しenc_reader.ReadString()
、 で応答することenc_writer.Write("Accepted")
です。しかし、クライアントは決して答えを得ることはありません。
メッセージの順序が重要かどうかをテストしましたが、そうです。サーバーから文字列を送信することから始めると、クライアントはそれを取得しますが、メッセージを送信し続けると、すぐに同じ状況になります。
CryptoStream がBinaryReader / BinaryWriterと適切に連携していないことに責任があるのではないかと考えていますが、この混乱をうまく整理する方法がわかりません。
私のサーバーには、BinaryReaderとBinaryWriterを期待するだけの関数がたくさんありますが、以前のように機能すると非常に便利です。
編集:
また、CTR モードを使用した AES の前述の実装を使用して、小さな C# プロジェクトhereで状況を再現しました。