SymmetricAlgorithmとは? わかりやすく解説

SymmetricAlgorithm クラス

対称アルゴリズムのすべての実装が継承する必要がある、抽象基本クラスを表します。

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

<ComVisibleAttribute(True)> _
Public MustInherit Class
 SymmetricAlgorithm
    Implements IDisposable
Dim instance As SymmetricAlgorithm
[ComVisibleAttribute(true)] 
public abstract class SymmetricAlgorithm :
 IDisposable
[ComVisibleAttribute(true)] 
public ref class SymmetricAlgorithm abstract
 : IDisposable
/** @attribute ComVisibleAttribute(true) */ 
public abstract class SymmetricAlgorithm implements
 IDisposable
ComVisibleAttribute(true) 
public abstract class SymmetricAlgorithm implements
 IDisposable
解説解説

このクラスは SymmetricAlgorithm クラスから派生しており、CBC (Cipher Block Chaining) と呼ばれるチェーン モードが使用されます。このモードでデータの暗号変換を実行するには、キー (Key) と初期化ベクタ (IV) が必要になります。SymmetricAlgorithm クラスのいずれかを使用して暗号化されたデータを復号化するには、Key プロパティと IV プロパティを、暗号化に使用された値と同じ値に設定する必要があります。対称アルゴリズムを使用する場合には、送信者と受信者以外に共有キーを知られないようにする必要があります。

RijndaelManaged、DESCryptoServiceProvider、RC2CryptoServiceProvider、および TripleDESCryptoServiceProvider は、対称アルゴリズムの実装です。

セキュリティの観点から考えると、派生クラスを使用する場合はオブジェクトの使用後にガベージ コレクションを実行するだけでは不十分です。オブジェクトに対して明示的に Clear メソッドを呼び出し、オブジェクト内の重要情報をすべて 0 にした後で解放する必要があります。ガベージ コレクションでは、収集されたオブジェクトのコンテンツをすべて 0 にするのではなく、単純にメモリを再割り当て可能としてマークするだけです。したがって、ガベージ コレクションの対象となったオブジェクトのデータが、未割り当てメモリのメモリ ヒープ内に残る場合があります。暗号化オブジェクトの場合、このデータにキー データや平文ブロックなどの機密情報が含まれている可能性があります。

.NET Framework では、重要情報を格納するすべての暗号化クラスに Clear メソッドが実装されています。Clear メソッドを呼び出すと、オブジェクト内の重要情報がすべて 0 で上書きされた後、オブジェクトが解放されます。これにより、オブジェクトに安全にガベージ コレクションを実行できます。オブジェクトが 0 で上書きされて解放されたら、disposing パラメータを True に設定して Dispose メソッドを呼び出し、オブジェクトに関連付けられているマネージ リソースとアンマネージ リソースをすべて破棄する必要があります。

継承時の注意 SymmetricAlgorithm クラスから継承する場合、CreateDecryptor、CreateEncryptor、GenerateIV、GenerateKey の各メンバをオーバーライドする必要があります。

使用例使用例

指定した Key プロパティと初期化ベクタ (IV) で RijndaelManaged クラスを使用して、inName で指定されたファイルを暗号化し、暗号化の結果を outName で指定したファイルに出力するコード例を次に示します。このメソッドに対する desKey パラメータおよび desIV パラメータは、8 バイト配列です。このコード例を実行するには、高度暗号化パックがインストールされている必要があります。

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
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();                   
 }
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,
    ubyte rijnKey[], ubyte 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.
    //Following is intermediate storage for the encryption.
    ubyte bin[] = new ubyte[100]; 
    //Following is the total number of bytes written.
    long rdlen = 0;
    //Following is the total length of the input file.
    long totlen = fin.get_Length(); 
    //Following is the number of bytes to be written at a time.
    int len; 

    //Create the default implementation, which is RijndaelManaged. 
        
    SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); 
    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", (System.Int64)rdlen);
    }
    encStream.Close();
    fout.Close();
    fin.Close();
} //EncryptData
継承階層継承階層
System.Object
  System.Security.Cryptography.SymmetricAlgorithm
     System.Security.Cryptography.DES
     System.Security.Cryptography.RC2
     System.Security.Cryptography.Rijndael
     System.Security.Cryptography.TripleDES
スレッド セーフスレッド セーフ
この型の public static (Visual Basic では Shared) メンバはすべて、スレッド セーフです。インスタンス メンバの場合は、スレッド セーフであるとは限りません。
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照

SymmetricAlgorithm コンストラクタ

SymmetricAlgorithm クラスの新しいインスタンスを初期化します。

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

Dim instance As New SymmetricAlgorithm
protected SymmetricAlgorithm ()
protected:
SymmetricAlgorithm ()
protected SymmetricAlgorithm ()
protected function SymmetricAlgorithm ()
例外例外
例外の種類条件

CryptographicException

対称アルゴリズムの派生クラスの実装が有効ではありません。

解説解説
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
SymmetricAlgorithm クラス
SymmetricAlgorithm メンバ
System.Security.Cryptography 名前空間
その他の技術情報
暗号サービス

SymmetricAlgorithm フィールド


SymmetricAlgorithm プロパティ


パブリック プロパティパブリック プロパティ

参照参照

関連項目

SymmetricAlgorithm クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス

SymmetricAlgorithm メソッド


パブリック メソッドパブリック メソッド

( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド Clear SymmetricAlgorithm クラスによって使用されているすべてのリソースを解放します。
パブリック メソッド Create オーバーロードされます。 対称アルゴリズムを実行するために使用する暗号オブジェクトを作成します。
パブリック メソッド CreateDecryptor オーバーロードされます。 対称復号化オブジェクトを作成します。
パブリック メソッド CreateEncryptor オーバーロードされます。 対称暗号化オブジェクトを作成します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。)
パブリック メソッド GenerateIV 派生クラスでオーバーライドされると、アルゴリズムで使用するランダムな初期化ベクタ (IV) を生成します。
パブリック メソッド GenerateKey 派生クラスでオーバーライドされると、アルゴリズムで使用するランダム キー (Key) を生成します。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 ( Object から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。)
パブリック メソッド ToString  現在の Object を表す String を返します。 ( Object から継承されます。)
パブリック メソッド ValidKeySize 指定されたキー サイズが、現在のアルゴリズムに対して有効かどうかを判断します。
プロテクト メソッドプロテクト メソッド
明示的インターフェイスの実装明示的インターフェイスの実装
  名前 説明
インターフェイスの明示的な実装 System.IDisposable.Dispose SymmetricAlgorithm によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。
参照参照

関連項目

SymmetricAlgorithm クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス

SymmetricAlgorithm メンバ

対称アルゴリズムのすべての実装が継承する必要がある、抽象基本クラスを表します。

SymmetricAlgorithm データ型で公開されるメンバを以下の表に示します。


プロテクト コンストラクタプロテクト コンストラクタ
  名前 説明
プロテクト メソッド SymmetricAlgorithm SymmetricAlgorithm クラスの新しいインスタンスを初期化します。
プロテクト フィールドプロテクト フィールド
パブリック プロパティパブリック プロパティ
パブリック メソッドパブリック メソッド
( プロテクト メソッド も参照)
  名前 説明
パブリック メソッド Clear SymmetricAlgorithm クラスによって使用されているすべてのリソースを解放します。
パブリック メソッド Create オーバーロードされます。 対称アルゴリズムを実行するために使用する暗号オブジェクトを作成します。
パブリック メソッド CreateDecryptor オーバーロードされます。 対称復号化オブジェクトを作成します。
パブリック メソッド CreateEncryptor オーバーロードされます。 対称暗号化オブジェクトを作成します。
パブリック メソッド Equals  オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。)
パブリック メソッド GenerateIV 派生クラスでオーバーライドされると、アルゴリズムで使用するランダムな初期化ベクタ (IV) を生成します。
パブリック メソッド GenerateKey 派生クラスでオーバーライドされると、アルゴリズムで使用するランダム キー (Key) を生成します。
パブリック メソッド GetHashCode  特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。)
パブリック メソッド GetType  現在のインスタンスの Type を取得します。 (Object から継承されます。)
パブリック メソッド ReferenceEquals  指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。)
パブリック メソッド ToString  現在の Object を表す String を返します。 (Object から継承されます。)
パブリック メソッド ValidKeySize 指定されたキー サイズが、現在のアルゴリズムに対して有効かどうかを判断します。
プロテクト メソッドプロテクト メソッド
明示的インターフェイスの実装明示的インターフェイスの実装
  名前 説明
インターフェイスの明示的な実装 System.IDisposable.Dispose SymmetricAlgorithm によって使用されているアンマネージ リソースを解放し、オプションでマネージ リソースも解放します。
参照参照

関連項目

SymmetricAlgorithm クラス
System.Security.Cryptography 名前空間

その他の技術情報

暗号サービス



英和和英テキスト翻訳

英語⇒日本語日本語⇒英語

辞書ショートカット

すべての辞書の索引

「SymmetricAlgorithm」の関連用語

SymmetricAlgorithmのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



SymmetricAlgorithmのページの著作権

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2026 Microsoft.All rights reserved.

©2026 GRAS Group, Inc.RSS