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) を持つ クラスを使用して、 で指定されたファイルを暗号化し、 でinNameoutName指定されたファイルに暗号化された結果を出力します。 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) が必要です。 クラスの 1 つを使用して暗号化されたデータの暗号化をSymmetricAlgorithm解除するには、 プロパティと プロパティをIV、暗号化に使用されたのと同じ値に設定Keyする必要があります。 対称アルゴリズムを役立てるには、秘密キーが送信者と受信側にのみ認識されている必要があります。

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

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

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

注意 (実装者)

クラスから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 によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。

適用対象

こちらもご覧ください