この記事は機械翻訳されています。英語版の記事を表示するには、[英語] のチェック ボックスをオンにしてください。また、テキストにマウス ポインターを合わせると、ポップアップ ウィンドウに英語のテキストを表示することもできます。
翻訳
英語

CryptoStream クラス

 

公開日: 2016年10月

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

名前空間:   System.Security.Cryptography
アセンブリ:  mscorlib (mscorlib.dll 内)

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

[ComVisibleAttribute(true)]
public class CryptoStream : Stream, IDisposable

名前説明
System_CAPS_pubmethodCryptoStream(Stream, ICryptoTransform, CryptoStreamMode)

暗号化の対象とするデータ ストリーム、使用する変換、およびストリームのモードを指定して、CryptoStream クラスの新しいインスタンスを初期化します。

名前説明
System_CAPS_pubpropertyCanRead

現在の CryptoStream が読み取り可能かどうかを示す値を取得します。(Stream.CanRead をオーバーライドします。)

System_CAPS_pubpropertyCanSeek

現在の CryptoStream 内でシークできるかどうかを示す値を取得します。(Stream.CanSeek をオーバーライドします。)

System_CAPS_pubpropertyCanTimeout

現在のストリームがタイムアウトできるかどうかを決定する値を取得します。(Stream から継承されます。)

System_CAPS_pubpropertyCanWrite

現在の CryptoStream が書き込み可能かどうかを示す値を取得します。(Stream.CanWrite をオーバーライドします。)

System_CAPS_pubpropertyHasFlushedFinalBlock

最後のバッファー ブロックが基になるストリームに書き込まれたかどうかを示す値を取得します。

System_CAPS_pubpropertyLength

ストリーム長 (バイト単位) を取得します。(Stream.Length をオーバーライドします。)

System_CAPS_pubpropertyPosition

現在のストリーム内の位置を取得または設定します。(Stream.Position をオーバーライドします。)

System_CAPS_pubpropertyReadTimeout

ストリームがタイムアウト前に読み取りを試行する期間を決定する値 (ミリ秒単位) を取得または設定します。(Stream から継承されます。)

System_CAPS_pubpropertyWriteTimeout

ストリームがタイムアウト前に書き込みを試行する期間を決定する値 (ミリ秒単位) を取得または設定します。(Stream から継承されます。)

名前説明
System_CAPS_pubmethodBeginRead(Byte[], Int32, Int32, AsyncCallback, Object)

非同期の読み込み動作を開始します。 (代わりに ReadAsync を使用してください。「解説」を参照してください。)(Stream から継承されます。)

System_CAPS_pubmethodBeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)

非同期の書き込み操作を開始します。 (代わりに WriteAsync を使用してください。「解説」を参照してください。)(Stream から継承されます。)

System_CAPS_pubmethodClear()

CryptoStream によって使用されているすべてのリソースを解放します。

System_CAPS_pubmethodClose()

現在のストリームを閉じ、現在のストリームに関連付けられているすべてのリソース (ソケット、ファイル ハンドルなど) を解放します。 このメソッドを呼び出す代わりに、ストリームが適切に破棄されていることを確認します。(Stream から継承されます。)

System_CAPS_pubmethodCopyTo(Stream)

現在のストリームからバイトを読み取り、別のストリームに書き込みます。(Stream から継承されます。)

System_CAPS_pubmethodCopyTo(Stream, Int32)

指定されたバッファー サイズを使用して、現在のストリームからバイトを読み取り、別のストリームに書き込みます。(Stream から継承されます。)

System_CAPS_pubmethodCopyToAsync(Stream)

現在のストリームからすべてのバイトを非同期に読み取り、別のストリームに書き込みます。(Stream から継承されます。)

System_CAPS_pubmethodCopyToAsync(Stream, Int32)

指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、別のストリームに書き込みます。(Stream から継承されます。)

System_CAPS_pubmethodCopyToAsync(Stream, Int32, CancellationToken)

指定されたバッファー サイズを使用して、現在のストリームからバイトを非同期に読み取り、指定されたバッファー サイズとキャンセル トークンを使用して、別のストリームに書き込みます。(Stream から継承されます。)

System_CAPS_pubmethodCreateObjRef(Type)

リモート オブジェクトとの通信に使用するプロキシの生成に必要なすべての関連情報を格納しているオブジェクトを作成します。(MarshalByRefObject から継承されます。)

System_CAPS_protmethodCreateWaitHandle()

互換性のために残されています。 WaitHandle オブジェクトを割り当てます。(Stream から継承されます。)

System_CAPS_pubmethodDispose()

Stream によって使用されているすべてのリソースを解放します。(Stream から継承されます。)

System_CAPS_protmethodDispose(Boolean)

CryptoStream によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。(Stream.Dispose(Boolean) をオーバーライドします。)

System_CAPS_pubmethodEndRead(IAsyncResult)

保留中の非同期読み取りが完了するまで待機します。 (代わりに ReadAsync を使用してください。「解説」を参照してください。)(Stream から継承されます。)

System_CAPS_pubmethodEndWrite(IAsyncResult)

非同期書き込み操作を終了します。 (代わりに WriteAsync を使用してください。「解説」を参照してください。)(Stream から継承されます。)

System_CAPS_pubmethodEquals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。(Object から継承されます。)

System_CAPS_protmethodFinalize()

オブジェクトが、ガベージ コレクションによって収集される前に、リソースの解放とその他のクリーンアップ操作の実行を試みることができるようにします。(Object から継承されます。)

System_CAPS_pubmethodFlush()

現在のストリームのバッファーをすべてクリアし、バッファー内にあるデータすべてを、基になるデバイスに書き込みます。(Stream.Flush() をオーバーライドします。)

System_CAPS_pubmethodFlushAsync()

ストリームに対応するすべてのバッファーを非同期にクリアし、バッファー内のデータを基になるデバイスに書き込みます。(Stream から継承されます。)

System_CAPS_pubmethodFlushAsync(CancellationToken)

現在のストリームのすべてのバッファーを非同期にクリアし、バッファー内のデータを基になるデバイスに書き込み、キャンセル要求を監視します。(Stream.FlushAsync(CancellationToken) をオーバーライドします。)

System_CAPS_pubmethodFlushFinalBlock()

基になるデータ ソースまたはリポジトリをバッファーの現在の状態に更新し、その後でバッファーをクリアします。

System_CAPS_pubmethodGetHashCode()

既定のハッシュ関数として機能します。(Object から継承されます。)

System_CAPS_pubmethodGetLifetimeService()

このインスタンスの有効期間ポリシーを制御する現在の有効期間サービス オブジェクトを取得します。(MarshalByRefObject から継承されます。)

System_CAPS_pubmethodGetType()

現在のインスタンスの Type を取得します。(Object から継承されます。)

System_CAPS_pubmethodInitializeLifetimeService()

このインスタンスの有効期間ポリシーを制御する有効期間サービス オブジェクトを取得します。(MarshalByRefObject から継承されます。)

System_CAPS_protmethodMemberwiseClone()

現在の Object の簡易コピーを作成します。(Object から継承されます。)

System_CAPS_protmethodMemberwiseClone(Boolean)

現在の簡易コピーを作成MarshalByRefObjectオブジェクト。(MarshalByRefObject から継承されます。)

System_CAPS_protmethodObjectInvariant()

互換性のために残されています。 この API は 製品 インフラストラクチャをサポートします。コードから直接使用するためのものではありません。 Contract のサポートを提供します。(Stream から継承されます。)

System_CAPS_pubmethodRead(Byte[], Int32, Int32)

現在のストリームからバイト シーケンスを読み取り、読み取ったバイト数だけストリーム内の位置を進めます。(Stream.Read(Byte[], Int32, Int32) をオーバーライドします。)

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32)

現在のストリームからバイト シーケンスを非同期に読み取り、読み取ったバイト数だけストリーム内の位置を進めます。(Stream から継承されます。)

System_CAPS_pubmethodReadAsync(Byte[], Int32, Int32, CancellationToken)

現在のストリームから非同期的にバイト シーケンスを読み取り、読み取ったバイト数だけストリーム内の位置を進め、キャンセル要求を監視します。(Stream.ReadAsync(Byte[], Int32, Int32, CancellationToken) をオーバーライドします。)

System_CAPS_pubmethodReadByte()

ストリームから 1 バイトを読み取り、ストリーム内の位置を 1 バイト進めます。ストリームの末尾の場合は -1 を返します。(Stream から継承されます。)

System_CAPS_pubmethodSeek(Int64, SeekOrigin)

現在のストリーム内の位置を設定します。(Stream.Seek(Int64, SeekOrigin) をオーバーライドします。)

System_CAPS_pubmethodSetLength(Int64)

現在のストリームの長さを設定します。(Stream.SetLength(Int64) をオーバーライドします。)

System_CAPS_pubmethodToString()

現在のオブジェクトを表す文字列を返します。(Object から継承されます。)

System_CAPS_pubmethodWrite(Byte[], Int32, Int32)

バイト シーケンスを現在の CryptoStream に書き込み、書き込んだバイト数の分だけストリーム内の現在位置を進めます。(Stream.Write(Byte[], Int32, Int32) をオーバーライドします。)

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32)

現在のストリームにバイト シーケンスを非同期に書き込み、書き込んだバイト数だけストリーム内の現在位置を進めます。(Stream から継承されます。)

System_CAPS_pubmethodWriteAsync(Byte[], Int32, Int32, CancellationToken)

現在のストリームにバイト シーケンスを非同期で書き込み、書き込んだバイト数だけストリーム内の現在位置を進め、キャンセル要求を監視します。(Stream.WriteAsync(Byte[], Int32, Int32, CancellationToken) をオーバーライドします。)

System_CAPS_pubmethodWriteByte(Byte)

ストリームの現在位置にバイトを書き込み、ストリームの位置を 1 バイトだけ進めます。(Stream から継承されます。)

The common language runtime uses a stream-oriented design for cryptography. The core of this design is T:System.Security.Cryptography.CryptoStream. Any cryptographic objects that implement T:System.Security.Cryptography.CryptoStream can be chained together with any objects that implement T:System.IO.Stream, so the streamed output from one object can be fed into the input of another object. The intermediate result (the output from the first object) does not need to be stored separately.

System_CAPS_important重要

This type implements the T:System.IDisposable interface. When you have finished using the type, you should dispose of it either directly or indirectly by calling its M:System.Security.Cryptography.CryptoStream.Clear method, which in turn calls its T:System.IDisposable implementation. To dispose of the type directly, call its M:System.Security.Cryptography.CryptoStream.Clear method in a try/catch block. To dispose of it indirectly, use a language construct such as using (in C#) or Using (in Visual Basic). For more information, see the “Using an Object that Implements IDisposable” section in the T:System.IDisposable interface topic.

You should always explicitly close your T:System.Security.Cryptography.CryptoStream object after you are done using it by calling the M:System.Security.Cryptography.CryptoStream.Clear method. Doing so flushes the underlying stream and causes all remaining blocks of data to be processed by the T:System.Security.Cryptography.CryptoStream object. However, if an exception occurs before you call the M:System.IO.Stream.Close method, the T:System.Security.Cryptography.CryptoStream object might not be closed. To ensure that the M:System.IO.Stream.Close method always gets called, place your call to the M:System.Security.Cryptography.CryptoStream.Clear method within the finally block of a try/catch statement.

The following example demonstrates how to use a T:System.Security.Cryptography.CryptoStream to encrypt a string. This method uses T:System.Security.Cryptography.RijndaelManaged class with the specified P:System.Security.Cryptography.SymmetricAlgorithm.Key and initialization vector (P:System.Security.Cryptography.SymmetricAlgorithm.IV).

using System;
using System.IO;
using System.Security.Cryptography;

namespace RijndaelManaged_Example
{
    class RijndaelExample
    {
        public static void Main()
        {
            try
            {

                string original = "Here is some data to encrypt!";

                // Create a new instance of the Rijndael
                // class.  This generates a new key and initialization 
                // vector (IV).
                using (Rijndael myRijndael = Rijndael.Create())
                {
                    // Encrypt the string to an array of bytes.
                    byte[] encrypted = EncryptStringToBytes(original, myRijndael.Key, myRijndael.IV);

                    // Decrypt the bytes to a string.
                    string roundtrip = DecryptStringFromBytes(encrypted, myRijndael.Key, myRijndael.IV);

                    //Display the original data and the decrypted data.
                    Console.WriteLine("Original:   {0}", original);
                    Console.WriteLine("Round Trip: {0}", roundtrip);
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Error: {0}", e.Message);
            }
        }
        static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            if (plainText == null || plainText.Length <= 0)
                throw new ArgumentNullException("plainText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");
            byte[] encrypted;
            // Create an Rijndael object
            // with the specified key and IV.
            using (Rijndael rijAlg = Rijndael.Create())
            {
                rijAlg.Key = Key;
                rijAlg.IV = IV;

                // Create an encryptor to perform the stream transform.
                ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);

                // Create the streams used for encryption.
                using (MemoryStream msEncrypt = new MemoryStream())
                {
                    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                    {
                        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                        {

                            //Write all data to the stream.
                            swEncrypt.Write(plainText);
                        }
                        encrypted = msEncrypt.ToArray();
                    }
                }
            }


            // Return the encrypted bytes from the memory stream.
            return encrypted;

        }

        static string DecryptStringFromBytes(byte[] cipherText, byte[] Key, byte[] IV)
        {
            // Check arguments.
            if (cipherText == null || cipherText.Length <= 0)
                throw new ArgumentNullException("cipherText");
            if (Key == null || Key.Length <= 0)
                throw new ArgumentNullException("Key");
            if (IV == null || IV.Length <= 0)
                throw new ArgumentNullException("IV");

            // Declare the string used to hold
            // the decrypted text.
            string plaintext = null;

            // Create an Rijndael object
            // with the specified key and IV.
            using (Rijndael rijAlg = Rijndael.Create())
            {
                rijAlg.Key = Key;
                rijAlg.IV = IV;

                // Create a decryptor to perform the stream transform.
                ICryptoTransform decryptor = rijAlg.CreateDecryptor(rijAlg.Key, rijAlg.IV);

                // Create the streams used for decryption.
                using (MemoryStream msDecrypt = new MemoryStream(cipherText))
                {
                    using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                    {
                        using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                        {

                            // Read the decrypted bytes from the decrypting stream
                            // and place them in a string.
                            plaintext = srDecrypt.ReadToEnd();
                        }
                    }
                }

            }

            return plaintext;

        }
    }
}

.NET Framework
1.1 以降で使用可能
Silverlight
2.0 以降で使用可能
Windows Phone Silverlight
7.0 以降で使用可能

この型のパブリック static (Visual Basic では Shared ) メンバーはスレッド セーフです。インスタンス メンバーの場合は、スレッド セーフであるとは限りません。

トップに戻る
表示: