SymmetricAlgorithm SymmetricAlgorithm SymmetricAlgorithm SymmetricAlgorithm Class

定義

対称アルゴリズムのすべての実装が継承する必要がある、抽象基本クラスを表します。Represents the abstract base class from which all implementations of symmetric algorithms must inherit.

public ref class SymmetricAlgorithm abstract : IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class SymmetricAlgorithm : IDisposable
type SymmetricAlgorithm = class
    interface IDisposable
Public MustInherit Class SymmetricAlgorithm
Implements IDisposable
継承
SymmetricAlgorithmSymmetricAlgorithmSymmetricAlgorithmSymmetricAlgorithm
派生
属性
実装

次のコード例ではRijndaelManaged 、クラスを指定KeyされたプロパティおよびIV初期化ベクター () と共にinName使用して、で指定されたファイルを暗号化し、暗号化された結果をによってoutName指定されたファイルに出力します。.The following code example uses the RijndaelManaged class with the specified Key property and initialization vector (IV) to encrypt a file specified by inName, and outputs the encrypted result to the file specified by outName. メソッドのdesIVパラメーターとパラメーターは8バイト配列です。desKeyThe desKey and desIV parameters to the method are 8-byte arrays. この例を実行するには、高暗号化パックがインストールされている必要があります。You must have the high encryption pack installed to run this example.

void EncryptData( String^ inName, String^ outName, array<Byte>^rijnKey, array<Byte>^rijnIV )
{
   
   //Create the file streams to handle the input and output files.
   FileStream^ fin = gcnew FileStream( inName,FileMode::Open,FileAccess::Read );
   FileStream^ fout = gcnew FileStream( outName,FileMode::OpenOrCreate,FileAccess::Write );
   fout->SetLength( 0 );
   
   //Create variables to help with read and write.
   array<Byte>^bin = gcnew array<Byte>(100);
   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 = gcnew 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();
}

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();                   
 }
   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

注釈

SymmetricAlgorithmクラスから派生するクラスは、暗号ブロックチェーン (CBC) と呼ばれるチェーンモードを使用します。このKeyモードでは、キー (IV) と初期化ベクター () を使用してデータに対して暗号変換を実行します。The classes that derive from the SymmetricAlgorithm class use a chaining mode called cipher block chaining (CBC), which requires a key (Key) and an initialization vector (IV) to perform cryptographic transformations on data. SymmetricAlgorithmクラスの1つを使用して暗号化されたデータを復号化KeyするにはIV 、プロパティとプロパティを、暗号化に使用したのと同じ値に設定する必要があります。To decrypt data that was encrypted using one of the SymmetricAlgorithm classes, you must set the Key property and the IV property to the same values that were used for encryption. 対称アルゴリズムを使用するには、送信側と受信側だけが秘密キーを認識している必要があります。For a symmetric algorithm to be useful, the secret key must be known only to the sender and the receiver.

RijndaelManaged、、 DESCryptoServiceProviderTripleDESCryptoServiceProviderは、対称アルゴリズムの実装です。 RC2CryptoServiceProviderRijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvider, and TripleDESCryptoServiceProvider are implementations of symmetric algorithms.

派生クラスを使用する場合、セキュリティの観点からは、オブジェクトの使用が終了した後にガベージコレクションを強制的に実行するだけでは不十分です。Note that when using derived classes, it is not enough, from a security perspective, to simply force a garbage collection after you have finished using the object. オブジェクトのメソッドをClear明示的に呼び出して、オブジェクト内のすべての機微なデータが解放されるようにする必要があります。You must explicitly call the Clear method on the object to zero out any sensitive data within the object before it is released. ガベージコレクションは、収集されたオブジェクトの内容をゼロにはしませんが、メモリを再割り当て可能なものとしてマークするだけであることに注意してください。Note that garbage collection does not zero out the contents of collected objects but simply marks the memory as available for reallocation. そのため、ガベージコレクションされたオブジェクトに含まれるデータは、まだ未割り当てメモリ内のメモリヒープ内に存在する可能性があります。Thus the data contained within a garbage collected object may still be present in the memory heap in unallocated memory. 暗号化オブジェクトの場合、このデータには、キーデータやプレーンテキストのブロックなどの機密情報が含まれている可能性があります。In the case of cryptographic objects, this data could contain sensitive information such as key data or a block of plain text.

機密データを保持する .NET Framework 内のすべての暗号化クラスClearは、メソッドを実装します。All cryptographic classes in the .NET Framework that hold sensitive data implement a Clear method. Clearメソッドを呼び出すと、オブジェクト内のすべての機微なデータが0で上書きされ、オブジェクトが解放されて、安全にガベージコレクションされるようになります。When called, the Clear method overwrites all sensitive data within the object with zeros and then releases the object so that it can be safely garbage collected. オブジェクトをゼロにして解放した場合は、パラメーターをDisposeTrue設定しdisposingてメソッドを呼び出して、オブジェクトに関連付けられているすべてのマネージリソースとアンマネージリソースを破棄する必要があります。When the object has been zeroed and released, you should then call the Dispose method with the disposing parameter set to True to dispose of all managed and unmanaged resources associated with the object.

注意 (継承者)

SymmetricAlgorithmクラスから継承する場合はCreateDecryptor(Byte[], Byte[])CreateEncryptor(Byte[], Byte[]) GenerateIV()、、、およびGenerateKey()の各メンバーをオーバーライドする必要があります。When you inherit from the SymmetricAlgorithm class, you must override the following members: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV(), and GenerateKey().

コンストラクター

SymmetricAlgorithm() SymmetricAlgorithm() SymmetricAlgorithm() SymmetricAlgorithm()

SymmetricAlgorithm クラスの新しいインスタンスを初期化します。Initializes a new instance of the SymmetricAlgorithm class.

フィールド

BlockSizeValue BlockSizeValue BlockSizeValue BlockSizeValue

暗号操作のブロック サイズをビット単位で表します。Represents the block size, in bits, of the cryptographic operation.

FeedbackSizeValue FeedbackSizeValue FeedbackSizeValue FeedbackSizeValue

暗号操作のフィードバック サイズをビット単位で表します。Represents the feedback size, in bits, of the cryptographic operation.

IVValue IVValue IVValue IVValue

対称アルゴリズムで使用する初期化ベクター (IV) を表します。Represents the initialization vector (IV) for the symmetric algorithm.

KeySizeValue KeySizeValue KeySizeValue KeySizeValue

対称アルゴリズムで使用する共有キーのサイズをビット単位で表します。Represents the size, in bits, of the secret key used by the symmetric algorithm.

KeyValue KeyValue KeyValue KeyValue

対称アルゴリズムの共有キーを表します。Represents the secret key for the symmetric algorithm.

LegalBlockSizesValue LegalBlockSizesValue LegalBlockSizesValue LegalBlockSizesValue

対称アルゴリズムでサポートされているブロック サイズをビット単位で指定します。Specifies the block sizes, in bits, that are supported by the symmetric algorithm.

LegalKeySizesValue LegalKeySizesValue LegalKeySizesValue LegalKeySizesValue

対称アルゴリズムでサポートされているキー サイズをビット単位で指定します。Specifies the key sizes, in bits, that are supported by the symmetric algorithm.

ModeValue ModeValue ModeValue ModeValue

対称アルゴリズムで使用する暗号モードを表します。Represents the cipher mode used in the symmetric algorithm.

PaddingValue PaddingValue PaddingValue PaddingValue

対称アルゴリズムで使用する埋め込みモードを表します。Represents the padding mode used in the symmetric algorithm.

プロパティ

BlockSize BlockSize BlockSize BlockSize

暗号操作のブロック サイズをビット単位で取得または設定します。Gets or sets the block size, in bits, of the cryptographic operation.

FeedbackSize FeedbackSize FeedbackSize FeedbackSize

暗号操作のフィードバック サイズをビット単位で取得または設定します。Gets or sets the feedback size, in bits, of the cryptographic operation.

IV IV IV IV

対称アルゴリズムの初期化ベクター (IV) を取得または設定します。Gets or sets the initialization vector (IV) for the symmetric algorithm.

Key Key Key Key

対称アルゴリズムの共有キーを取得または設定します。Gets or sets the secret key for the symmetric algorithm.

KeySize KeySize KeySize KeySize

対称アルゴリズムで使用する共有キーのサイズをビット単位で取得または設定します。Gets or sets the size, in bits, of the secret key used by the symmetric algorithm.

LegalBlockSizes LegalBlockSizes LegalBlockSizes LegalBlockSizes

対称アルゴリズムでサポートされているブロック サイズをビット単位で取得します。Gets the block sizes, in bits, that are supported by the symmetric algorithm.

LegalKeySizes LegalKeySizes LegalKeySizes LegalKeySizes

対称アルゴリズムでサポートされているキー サイズをビット単位で取得します。Gets the key sizes, in bits, that are supported by the symmetric algorithm.

Mode Mode Mode Mode

対称アルゴリズムの操作モードを取得または設定します。Gets or sets the mode for operation of the symmetric algorithm.

Padding Padding Padding Padding

対称アルゴリズムで使用する埋め込みモードを取得または設定します。Gets or sets the padding mode used in the symmetric algorithm.

メソッド

Clear() Clear() Clear() Clear()

SymmetricAlgorithm クラスによって使用されているすべてのリソースを解放します。Releases all resources used by the SymmetricAlgorithm class.

Create() Create() Create() Create()

対称アルゴリズムを実行するために使用する既定の暗号オブジェクトを作成します。Creates a default cryptographic object used to perform the symmetric algorithm.

Create(String) Create(String) Create(String) Create(String)

対称アルゴリズムを実行するために使用する指定された暗号オブジェクトを作成します。Creates the specified cryptographic object used to perform the symmetric algorithm.

CreateDecryptor() CreateDecryptor() CreateDecryptor() CreateDecryptor()

現在の Key プロパティおよび初期化ベクター (IV) を使用して、対称復号化オブジェクトを作成します。Creates a symmetric decryptor object with the current Key property and initialization vector (IV).

CreateDecryptor(Byte[], Byte[]) CreateDecryptor(Byte[], Byte[]) CreateDecryptor(Byte[], Byte[]) CreateDecryptor(Byte[], Byte[])

派生クラスでオーバーライドされると、指定した Key プロパティおよび初期化ベクター (IV) を使用して、対称復号化オブジェクトを作成します。When overridden in a derived class, creates a symmetric decryptor object with the specified Key property and initialization vector (IV).

CreateEncryptor() CreateEncryptor() CreateEncryptor() CreateEncryptor()

現在の Key プロパティおよび初期化ベクター (IV) を使用して、対称暗号化オブジェクトを作成します。Creates a symmetric encryptor object with the current Key property and initialization vector (IV).

CreateEncryptor(Byte[], Byte[]) CreateEncryptor(Byte[], Byte[]) CreateEncryptor(Byte[], Byte[]) CreateEncryptor(Byte[], Byte[])

派生クラスでオーバーライドされると、指定した Key プロパティおよび初期化ベクター (IV) を使用して、対称暗号化オブジェクトを作成します。When overridden in a derived class, creates a symmetric encryptor object with the specified Key property and initialization vector (IV).

Dispose() Dispose() Dispose() Dispose()

SymmetricAlgorithm クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。Releases all resources used by the current instance of the SymmetricAlgorithm class.

Dispose(Boolean) Dispose(Boolean) Dispose(Boolean) Dispose(Boolean)

SymmetricAlgorithm によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

指定したオブジェクトが、現在のオブジェクトと等しいかどうかを判断します。Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

このメンバーは Finalize() をオーバーライドし、より詳細なドキュメントがそのトピックで使用できるようになる場合があります。This member overrides Finalize(), and more complete documentation might be available in that topic.

Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。Allows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection.

GenerateIV() GenerateIV() GenerateIV() GenerateIV()

派生クラスでオーバーライドされると、アルゴリズムで使用するランダムな初期化ベクター (IV) を生成します。When overridden in a derived class, generates a random initialization vector (IV) to use for the algorithm.

GenerateKey() GenerateKey() GenerateKey() GenerateKey()

派生クラスでオーバーライドされると、アルゴリズムで使用するランダム キー (Key) を生成します。When overridden in a derived class, generates a random key (Key) to use for the algorithm.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

既定のハッシュ関数として機能します。Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

現在のインスタンスの Type を取得します。Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

現在の Object の簡易コピーを作成します。Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

現在のオブジェクトを表す文字列を返します。Returns a string that represents the current object.

(Inherited from Object)
ValidKeySize(Int32) ValidKeySize(Int32) ValidKeySize(Int32) ValidKeySize(Int32)

指定されたキー サイズが、現在のアルゴリズムに対して有効かどうかを判断します。Determines whether the specified key size is valid for the current algorithm.

明示的なインターフェイスの実装

IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose() IDisposable.Dispose()

SymmetricAlgorithm によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

適用対象

こちらもご覧ください