CryptoStream クラス

データ ストリームを暗号変換にリンクするストリームを定義します。

この型のすべてのメンバの一覧については、CryptoStream メンバ を参照してください。

System.Object
   System.MarshalByRefObject
      System.IO.Stream
         System.Security.Cryptography.CryptoStream

Public Class CryptoStream
   Inherits Stream
[C#]
public class CryptoStream : Stream
[C++]
public __gc class CryptoStream : public Stream
[JScript]
public class CryptoStream extends Stream

スレッドセーフ

この型の public static (Visual Basicでは Shared) のすべてのメンバは、マルチスレッド操作で安全に使用できます。インスタンスのメンバの場合は、スレッドセーフであるとは限りません。

解説

共通言語ランタイムは、ストリーム指向の暗号デザインを採用しています。このデザインの中核となっているのが CryptoStream です。 CryptoStream を実装するすべての暗号オブジェクトは、 Stream を実装する任意のオブジェクトと一緒にチェインにまとめることができるため、あるオブジェクトからの出力をストリーム経由で別のオブジェクトの入力に転送できます。このとき、中間結果 (最初のオブジェクトからの出力) を別個に格納する必要はありません。

使用例

[Visual Basic, C#, C++] CryptoStream を使用して、バイト配列を暗号化する方法を次の例に示します。このメソッドは、 Key と初期化ベクタ (IV) を指定して RijndaelManaged を使用し、 inName で指定したファイルを暗号化し、暗号化の結果を outName で指定したファイルに出力します。このメソッドに対する rijnKey パラメータおよび rijnIV パラメータは、16 バイト配列です。このサンプルを実行するには、高度暗号化パックがインストールされている必要があります。

 
Private Shared Sub EncryptData(inName As String, outName As String, _
rijnKey() As Byte, rijnIV() As Byte)

    'Create the file streams to handle the input and output files.
    Dim fin As New FileStream(inName, FileMode.Open, FileAccess.Read)
    Dim fout As New FileStream(outName, FileMode.OpenOrCreate, _
       FileAccess.Write)
    fout.SetLength(0)
    
    'Create variables to help with read and write.
    Dim bin(100) As Byte 'This is intermediate storage for the encryption.
    Dim rdlen As Long = 0 'This is the total number of bytes written.
    Dim totlen As Long = fin.Length 'Total length of the input file.
    Dim len As Integer 'This is the number of bytes to be written at a time.
    'Creates the default implementation, which is RijndaelManaged.
    Dim rijn As SymmetricAlgorithm = SymmetricAlgorithm.Create()
    Dim encStream As New CryptoStream(fout, _
       rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write)
    
    Console.WriteLine("Encrypting...")
    
    'Read from the input file, then encrypt and write to the output file.
    While rdlen < totlen
        len = fin.Read(bin, 0, 100)
        encStream.Write(bin, 0, len)
        rdlen = Convert.ToInt32(rdlen + len)
        Console.WriteLine("{0} bytes processed", rdlen)
    End While
    
    encStream.Close()
fout.Close()
fin.Close()
End Sub

[C#] 
private static void EncryptData(String inName, String outName, byte[] rijnKey, byte[] rijnIV)
 {    
     //Create the file streams to handle the input and output files.
     FileStream fin = new FileStream(inName, FileMode.Open, FileAccess.Read);
     FileStream fout = new FileStream(outName, FileMode.OpenOrCreate, FileAccess.Write);
     fout.SetLength(0);
       
     //Create variables to help with read and write.
     byte[] bin = new byte[100]; //This is intermediate storage for the encryption.
     long rdlen = 0;              //This is the total number of bytes written.
     long totlen = fin.Length;    //This is the total length of the input file.
     int len;                     //This is the number of bytes to be written at a time.
 
     SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); //Creates the default implementation, which is RijndaelManaged.         
     CryptoStream encStream = new CryptoStream(fout, rijn.CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode.Write);
                
     Console.WriteLine("Encrypting...");
 
     //Read from the input file, then encrypt and write to the output file.
     while(rdlen < totlen)
     {
         len = fin.Read(bin, 0, 100);
         encStream.Write(bin, 0, len);
         rdlen = rdlen + len;
         Console.WriteLine("{0} bytes processed", rdlen);
     }
 
     encStream.Close();  
     fout.Close();
     fin.Close();                   
 }

[C++] 
void EncryptData(String* inName, String* outName, Byte rijnKey[], Byte rijnIV[])
{    
    //Create the file streams to handle the input and output files.
    FileStream* fin = new FileStream(inName, FileMode::Open, FileAccess::Read);
    FileStream* fout = new FileStream(outName, FileMode::OpenOrCreate, FileAccess::Write);
    fout->SetLength(0);

    //Create variables to help with read and write.
    Byte bin[] = new Byte[100]; //This is intermediate storage for the encryption.
    long rdlen = 0;              //This is the total number of bytes written.
    long totlen = (long)fin->Length;//This is the total length of the input file.
    int len;                     //This is the number of bytes to be written at a time.

    SymmetricAlgorithm* rijn = SymmetricAlgorithm::Create(); //Creates the default implementation, which is RijndaelManaged.         
    CryptoStream* encStream = new CryptoStream(fout, rijn->CreateEncryptor(rijnKey, rijnIV), CryptoStreamMode::Write);

    Console::WriteLine(S"Encrypting...");

    //Read from the input file, then encrypt and write to the output file.
    while(rdlen < totlen)
    {
        len = fin->Read(bin, 0, 100);
        encStream->Write(bin, 0, len);
        rdlen = rdlen + len;
        Console::WriteLine(S"{0} bytes processed", __box(rdlen));
    }

    encStream->Close();  
    fout->Close();
    fin->Close();                   
}

[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン 言語のフィルタ をクリックします。

必要条件

名前空間: System.Security.Cryptography

プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ

アセンブリ: Mscorlib (Mscorlib.dll 内)

参照

CryptoStream メンバ | System.Security.Cryptography 名前空間 | 暗号サービス