クリックして評価とフィードバックをお寄せください
MSDN
MSDN ライブラリ
.NET 開発
.NET Framework 3.5
.NET Framework 3.5
SymmetricAlgorithm クラス

  低帯域幅での表示をオンにする
このページは次のバージョンについて記述しています。
Microsoft Visual Studio 2008/.NET Framework 3.5

その他のバージョンについては、以下の情報を参照してください。
.NET Framework クラス ライブラリ
SymmetricAlgorithm クラス

更新 : 2007 年 11 月

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

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

Visual Basic (宣言)
<ComVisibleAttribute(True)> _
Public MustInherit Class SymmetricAlgorithm _
    Implements IDisposable
Visual Basic (使用法)
Dim instance As SymmetricAlgorithm
C#
[ComVisibleAttribute(true)]
public abstract class SymmetricAlgorithm : IDisposable
Visual C++
[ComVisibleAttribute(true)]
public ref class SymmetricAlgorithm abstract : IDisposable
J#
/** @attribute ComVisibleAttribute(true) */
public abstract class SymmetricAlgorithm implements IDisposable
JScript
public abstract class SymmetricAlgorithm implements IDisposable

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

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

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

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

継承元へのメモ :

SymmetricAlgorithm クラスから継承する場合、CreateDecryptorCreateEncryptorGenerateIVGenerateKey の各メンバをオーバーライドする必要があります。

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

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

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


J#
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

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

Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC

.NET Framework および .NET Compact Framework では、各プラットフォームのすべてのバージョンはサポートしていません。サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。

.NET Framework

サポート対象 : 3.5、3.0、2.0、1.1、1.0

.NET Compact Framework

サポート対象 : 3.5、2.0
コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件  |  商標  |  プライバシー
Page view tracker