FileStreamやMemoryStreamといったクラスは各種データソースからの読み書きを実装・抽象化したものですが、Stream派生クラスの一部には他のStreamのラッパーとして動作するものが存在します。 このようなStream派生クラスでは、データソースとなるStreamをラップし、Streamからの読み書きに際してエンコード/デコードや暗号化/復号化などといったデータフォーマットの変換を行うものや、読み書きするデータのバッファリングを行うなどの機能を追加します。 ラッパーとなるStreamでは、データソースに対する読み書き自体は下位のStreamに行わせ、自身は読み書きする側とデータソースの間に入り追加の処理を行います。

例えば次のコードでは、CryptoStreamを使ってデータをBASE64形式にエンコードした上でFileStreamに書き込んでいます。

CryptoStreamを使ってデータをBASE64エンコードしてFileStreamに書き込む
using System;
using System.IO;
using System.Security.Cryptography;

class Sample {
  static void Main()
  {
    // ファイルsample.datを開き、書き込みアクセスを行うためのFileStreamを作成する
    using (Stream fileStream = new FileStream("sample.dat", FileMode.Create, FileAccess.Write)) {
      // BASE64への変換を行った上でfileStreamに書き込みを行うCryptoStreamを作成する
      using (Stream base64Stream = new CryptoStream(fileStream, new ToBase64Transform(), CryptoStreamMode.Write)) {
        // 書き込むデータが格納されているバイト配列
        byte[] data = new byte[8] {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};

        // データを書き込む
        // CryptoStreamによりデータはBASE64にエンコードされ、次いで
        // FileStreamによりエンコードされたデータがファイルに書き込まれる
        base64Stream.Write(data, 0, 8);
      }
    }
  }
}
sample.datに書き込まれる内容
QUJDREVGR0g=

このように、CryptoStreamを使うことで他のStreamに対してBASE64エンコードを行う機能を追加することができます。

CryptoStreamはBASE64形式でのエンコード・デコード以外にも、様々な形式での暗号化やフォーマット変換を行うために使われます。