SymmetricAlgorithm クラス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
対称アルゴリズムのすべての実装が継承する必要がある、抽象基本クラスを表します。
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) が必要です。 クラスの 1 つを使用して暗号化されたデータの暗号化をSymmetricAlgorithm解除するには、 プロパティと プロパティをIV、暗号化に使用されたのと同じ値に設定Keyする必要があります。 対称アルゴリズムを役立てるには、秘密キーが送信者と受信側にのみ認識されている必要があります。
Aes、 DES、 RC2、および 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() | |
CreateDecryptor(Byte[], Byte[]) |
派生クラスでオーバーライドされると、指定した Key プロパティおよび初期化ベクター (IV) を使用して、対称復号化オブジェクトを作成します。 |
CreateEncryptor() | |
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 によって使用されているアンマネージド リソースを解放し、オプションでマネージド リソースも解放します。 |
適用対象
こちらもご覧ください
.NET