SymmetricAlgorithm クラス

定義

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

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

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

void EncryptData( String^ inName, String^ outName, array<Byte>^aesKey, array<Byte>^aesIV )
{
   
   //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.

   Aes^ aes = Aes::Create();

   CryptoStream^ encStream = gcnew CryptoStream( fout,aes->CreateEncryptor( aesKey, aesIV ),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[] aesKey, byte[] aesIV)
 {
     //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.

     Aes aes = Aes.Create();
     CryptoStream encStream = new CryptoStream(fout, aes.CreateEncryptor(aesKey, aesIV), 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) が必要です。 いずれかのクラスを使用して暗号化されたデータの暗号化をSymmetricAlgorithm解除するには、プロパティとプロパティをIV、暗号化に使用されたのと同じ値に設定Keyする必要があります。 対称アルゴリズムを役立てるには、秘密キーを送信者と受信者にのみ認識する必要があります。

AesDES、およびRC2TripleDES対称アルゴリズムの実装です。

派生クラスを使用する場合、オブジェクトの使用が完了した後にガベージ コレクションを強制するだけでは、セキュリティの観点からは不十分であることに注意してください。 オブジェクト内の機密データを Clear 解放する前に、オブジェクトのメソッドを明示的に呼び出して、機密データをゼロにする必要があります。 ガベージ コレクションでは、収集されたオブジェクトの内容は 0 になりませんが、メモリを再割り当て可能としてマークするだけです。 したがって、ガベージ コレクションされたオブジェクトに含まれるデータは、未割り当てメモリのメモリ ヒープにまだ存在する可能性があります。 暗号化オブジェクトの場合、このデータには、キー データやプレーン テキストのブロックなどの機密情報が含まれている可能性があります。

機密データを保持する.NET Framework内のすべての暗号化クラスは、メソッドをClear実装します。 呼び出されると、メソッドは Clear オブジェクト内のすべての機密データをゼロで上書きし、オブジェクトを解放して、ガベージ コレクションを安全に行えるようにします。 オブジェクトがゼロになり解放されたら、パラメーターを設定してメソッドdisposingDispose呼び出して、オブジェクトにTrue関連付けられているすべてのマネージド リソースとアンマネージド リソースを破棄する必要があります。

注意 (実装者)

クラスからSymmetricAlgorithm継承する場合は、次のメンバーをオーバーライドする必要があります。 GenerateIV()CreateDecryptor(Byte[], Byte[])CreateEncryptor(Byte[], Byte[])GenerateKey()

コンストラクター

SymmetricAlgorithm()

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

フィールド

BlockSizeValue

暗号操作のブロック サイズをビット単位で表します。

FeedbackSizeValue

暗号操作のフィードバック サイズをビット単位で表します。

IVValue

対称アルゴリズムで使用する初期化ベクター (IV) を表します。

KeySizeValue

対称アルゴリズムで使用する共有キーのサイズをビット単位で表します。

KeyValue

対称アルゴリズムの共有キーを表します。

LegalBlockSizesValue

対称アルゴリズムでサポートされているブロック サイズをビット単位で指定します。

LegalKeySizesValue

対称アルゴリズムでサポートされているキー サイズをビット単位で指定します。

ModeValue

対称アルゴリズムで使用する暗号モードを表します。

PaddingValue

対称アルゴリズムで使用する埋め込みモードを表します。

プロパティ

BlockSize

暗号操作のブロック サイズをビット単位で取得または設定します。

FeedbackSize

暗号フィードバック (CFB) および出力フィードバック (OFB) の暗号モードにおける暗号化操作のフィードバック サイズをビット単位で取得または設定します。

IV

対称アルゴリズムの初期化ベクター (IV) を取得または設定します。

Key

対称アルゴリズムの共有キーを取得または設定します。

KeySize

対称アルゴリズムで使用する共有キーのサイズをビット単位で取得または設定します。

LegalBlockSizes

対称アルゴリズムでサポートされているブロック サイズをビット単位で取得します。

LegalKeySizes

対称アルゴリズムでサポートされているキー サイズをビット単位で取得します。

Mode

対称アルゴリズムの操作モードを取得または設定します。

Padding

対称アルゴリズムで使用する埋め込みモードを取得または設定します。

メソッド

Clear()

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

Create()
互換性のために残されています。
互換性のために残されています。

対称アルゴリズムを実行するために使用する既定の暗号オブジェクトを作成します。

Create(String)

対称アルゴリズムを実行するために使用する指定された暗号オブジェクトを作成します。

CreateDecryptor()

現在の Key プロパティおよび初期化ベクター (IV) を使用して、対称復号化オブジェクトを作成します。

CreateDecryptor(Byte[], Byte[])

派生クラスでオーバーライドされると、指定した Key プロパティおよび初期化ベクター (IV) を使用して、対称復号化オブジェクトを作成します。

CreateEncryptor()

現在の Key プロパティおよび初期化ベクター (IV) を使用して、対称暗号化オブジェクトを作成します。

CreateEncryptor(Byte[], Byte[])

派生クラスでオーバーライドされると、指定した Key プロパティおよび初期化ベクター (IV) を使用して、対称暗号化オブジェクトを作成します。

DecryptCbc(Byte[], Byte[], PaddingMode)

指定したパディング モードで CBC モードを使用してデータの暗号化を解除します。

DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

指定したパディング モードで CBC モードを使用してデータの暗号化を解除します。

DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

指定したパディング モードで CBC モードを使用して、指定したバッファーにデータを復号化します。

DecryptCfb(Byte[], Byte[], PaddingMode, Int32)

指定された埋め込みモードとフィードバック サイズで CFB モードを使用してデータを復号化します。

DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

指定された埋め込みモードとフィードバック サイズで CFB モードを使用してデータを復号化します。

DecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

指定したパディング モードとフィードバック サイズの CFB モードを使用して、指定したバッファーにデータを復号化します。

DecryptEcb(Byte[], PaddingMode)

指定したパディング モードで ECB モードを使用してデータを復号化します。

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

指定したパディング モードで ECB モードを使用してデータを復号化します。

DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

指定したパディング モードで ECB モードを使用して、指定したバッファーにデータを復号化します。

Dispose()

SymmetricAlgorithm クラスの現在のインスタンスによって使用されているすべてのリソースを解放します。

Dispose(Boolean)

SymmetricAlgorithm によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。

EncryptCbc(Byte[], Byte[], PaddingMode)

指定したパディング モードで CBC モードを使用してデータを暗号化します。

EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode)

指定したパディング モードで CBC モードを使用してデータを暗号化します。

EncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

指定したパディング モードの CBC モードを使用して、指定したバッファーにデータを暗号化します。

EncryptCfb(Byte[], Byte[], PaddingMode, Int32)

指定されたパディング モードとフィードバック サイズで CFB モードを使用してデータを暗号化します。

EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode, Int32)

指定されたパディング モードとフィードバック サイズで CFB モードを使用してデータを暗号化します。

EncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

指定したパディング モードとフィードバック サイズの CFB モードを使用して、指定したバッファーにデータを暗号化します。

EncryptEcb(Byte[], PaddingMode)

指定されたパディング モードで ECB モードを使用してデータを暗号化します。

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

指定されたパディング モードで ECB モードを使用してデータを暗号化します。

EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode)

指定したパディング モードで ECB モードを使用して、指定したバッファーにデータを暗号化します。

Equals(Object)

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

(継承元 Object)
Finalize()

このメンバーは Finalize() をオーバーライドし、より詳細なドキュメントがそのトピックで使用できるようになる場合があります。

Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。

GenerateIV()

派生クラスでオーバーライドされると、アルゴリズムで使用するランダムな初期化ベクター (IV) を生成します。

GenerateKey()

派生クラスでオーバーライドされると、アルゴリズムで使用するランダム キー (Key) を生成します。

GetCiphertextLengthCbc(Int32, PaddingMode)

CBC モードで指定されたパディング モードとプレーンテキストの長さを持つ暗号テキストの長さを取得します。

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

指定されたパディング モードと CFB モードのプレーンテキスト長を持つ暗号テキストの長さを取得します。

GetCiphertextLengthEcb(Int32, PaddingMode)

指定されたパディング モードと ECB モードのプレーンテキスト長を持つ暗号テキストの長さを取得します。

GetHashCode()

既定のハッシュ関数として機能します。

(継承元 Object)
GetType()

現在のインスタンスの Type を取得します。

(継承元 Object)
MemberwiseClone()

現在の Object の簡易コピーを作成します。

(継承元 Object)
ToString()

現在のオブジェクトを表す文字列を返します。

(継承元 Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

指定したパディング モードで CBC モードを使用して、指定したバッファーにデータの復号化を試みます。

TryDecryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

派生クラスでオーバーライドされると、指定したパディング モードで CBC モードを使用して、指定したバッファーにデータを復号化しようとします。

TryDecryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

指定したパディング モードとフィードバック サイズを持つ CFB モードを使用して、指定したバッファーにデータを復号化しようとします。

TryDecryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

派生クラスでオーバーライドされると、指定したパディング モードとフィードバック サイズの CFB モードを使用して、指定したバッファーにデータを復号化しようとします。

TryDecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

指定したパディング モードで ECB モードを使用して、指定したバッファーにデータの復号化を試みます。

TryDecryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

派生クラスでオーバーライドされると、指定したパディング モードで ECB モードを使用して、指定したバッファーにデータを復号化しようとします。

TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

指定したパディング モードで CBC モードを使用して、指定したバッファーにデータを暗号化しようとします。

TryEncryptCbcCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

派生クラスでオーバーライドされると、指定したパディング モードで CBC モードを使用して、指定したバッファーにデータを暗号化しようとします。

TryEncryptCfb(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode, Int32)

指定したパディング モードとフィードバック サイズの CFB モードを使用して、指定したバッファーにデータを暗号化しようとします。

TryEncryptCfbCore(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32, Int32)

派生クラスでオーバーライドされると、指定したパディング モードとフィードバック サイズを持つ CFB モードを使用して、指定したバッファーにデータを暗号化しようとします。

TryEncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

指定したパディング モードで ECB モードを使用して、指定したバッファーにデータを暗号化しようとします。

TryEncryptEcbCore(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode, Int32)

派生クラスでオーバーライドされると、指定したパディング モードで ECB モードを使用して、指定したバッファーにデータを暗号化しようとします。

ValidKeySize(Int32)

指定されたキー サイズが、現在のアルゴリズムに対して有効かどうかを判断します。

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

IDisposable.Dispose()

この API は製品インフラストラクチャをサポートします。コードから直接使用するものではありません。

SymmetricAlgorithm によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。

適用対象

こちらもご覧ください