SymmetricAlgorithm 클래스

정의

모든 대칭 알고리즘의 구현에서 상속해야 하는 추상 기본 클래스를 나타냅니다.Represents the abstract base class from which all implementations of symmetric algorithms must inherit.

public ref class SymmetricAlgorithm abstract : IDisposable
[System.Runtime.InteropServices.ComVisible(true)]
public abstract class SymmetricAlgorithm : IDisposable
type SymmetricAlgorithm = class
    interface IDisposable
Public MustInherit Class SymmetricAlgorithm
Implements IDisposable
상속
SymmetricAlgorithm
파생
특성
구현

예제

다음 코드 예제에서는 합니다 RijndaelManaged 지정 된 클래스 Key 속성 및 초기화 벡터 (IV)로 지정 된 파일을 암호화할 inName, 로지정된파일에암호화된결과출력outName.The following code example uses the RijndaelManaged class with the specified Key property and initialization vector (IV) to encrypt a file specified by inName, and outputs the encrypted result to the file specified by outName. 합니다 desKeydesIV 메서드에 매개 변수는 8 바이트 배열입니다.The desKey and desIV parameters to the method are 8-byte arrays. 이 예제를 실행 하려면 설치 하는 높은 수준의 암호화 팩이 있어야 합니다.You must have the high encryption pack installed to run this example.

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, 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();                   
 }
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) 데이터의 암호화 변환을 수행 하 합니다.The classes that derive from the SymmetricAlgorithm class use a chaining mode called cipher block chaining (CBC), which requires a key (Key) and an initialization vector (IV) to perform cryptographic transformations on data. 중 하나를 사용 하 여 암호화 된 데이터를 해독 하는 SymmetricAlgorithm 설정한 클래스는 Key 속성 및 IV 암호화에 사용 된 동일한 값 속성입니다.To decrypt data that was encrypted using one of the SymmetricAlgorithm classes, you must set the Key property and the IV property to the same values that were used for encryption. 유용 하 게 대칭 알고리즘에 대 한 비밀 키 발신자와 수신자 에게만 알려져야 합니다.For a symmetric algorithm to be useful, the secret key must be known only to the sender and the receiver.

RijndaelManagedDESCryptoServiceProvider, RC2CryptoServiceProvider, 및 TripleDESCryptoServiceProvider 대칭 알고리즘의 구현 됩니다.RijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvider, and TripleDESCryptoServiceProvider are implementations of symmetric algorithms.

파생 된 클래스를 사용 하 여 때 충분 하지 않습니다, 단순히 강제로 가비지 수집할 개체를 사용 하 여 완료 한 후 보안의 관점에서 note 합니다.Note that when using derived classes, it is not enough, from a security perspective, to simply force a garbage collection after you have finished using the object. 명시적으로 호출 해야 합니다 Clear 해제 되기 전에 개체 내에서 중요 한 데이터를 영구 개체에는 메서드.You must explicitly call the Clear method on the object to zero out any sensitive data within the object before it is released. 가비지 수집 수집 된 개체의 내용을 지우지 않고 단순히 재할당에 대 한 사용 가능한 메모리 note 합니다.Note that garbage collection does not zero out the contents of collected objects but simply marks the memory as available for reallocation. 따라서 할당 되지 않은 메모리의 가비지 수집된 개체에 포함 된 데이터는 메모리 힙의 존재할 수 여전히 있습니다.Thus the data contained within a garbage collected object may still be present in the memory heap in unallocated memory. 암호화 개체의 경우이 데이터는 일반 텍스트 블록의 주요 데이터 등 중요 한 정보를 포함할 수 있습니다.In the case of cryptographic objects, this data could contain sensitive information such as key data or a block of plain text.

.NET Framework에서 구현 하는 중요 한 데이터를 보유 하는 모든 암호화 클래스를 Clear 메서드.All cryptographic classes in the .NET Framework that hold sensitive data implement a Clear method. 를 호출 하는 경우는 Clear 메서드는 개체 내에서 모든 중요 한 데이터를 0으로 덮어쓴 및 가비지 수집을 안전 하 게 될 수 있도록 한 다음 개체를 해제 합니다.When called, the Clear method overwrites all sensitive data within the object with zeros and then releases the object so that it can be safely garbage collected. 다음 호출 해야 개체를 0으로 설정 하 고 출시 되었습니다 합니다 Dispose 메서드를 disposing 매개 변수 설정 True 를 삭제 하기 위해 관리 되는 모든 및이 관리 되지 않는 개체에 연결 된 리소스입니다.When the object has been zeroed and released, you should then call the Dispose method with the disposing parameter set to True to dispose of all managed and unmanaged resources associated with the object.

구현자 참고

상속 하는 경우는 SymmetricAlgorithm 클래스 멤버를 재정의 해야 합니다: CreateDecryptor(Byte[], Byte[])CreateEncryptor(Byte[], Byte[])GenerateIV(), 및 GenerateKey()합니다.When you inherit from the SymmetricAlgorithm class, you must override the following members: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV(), and GenerateKey().

생성자

SymmetricAlgorithm()

SymmetricAlgorithm 클래스의 새 인스턴스를 초기화합니다.Initializes a new instance of the SymmetricAlgorithm class.

필드

BlockSizeValue

암호화 작업의 블록 크기(비트)를 나타냅니다.Represents the block size, in bits, of the cryptographic operation.

FeedbackSizeValue

암호화 작업의 피드백 크기(비트 단위)를 나타냅니다.Represents the feedback size, in bits, of the cryptographic operation.

IVValue

대칭 알고리즘에 대한 초기화 벡터(IV)를 나타냅니다.Represents the initialization vector (IV) for the symmetric algorithm.

KeySizeValue

대칭 알고리즘에서 사용하는 비밀 키의 크기(비트 단위)를 나타냅니다.Represents the size, in bits, of the secret key used by the symmetric algorithm.

KeyValue

대칭 알고리즘에 대한 비밀 키를 나타냅니다.Represents the secret key for the symmetric algorithm.

LegalBlockSizesValue

대칭 알고리즘에서 지원하는 블록 크기(비트 단위)를 지정합니다.Specifies the block sizes, in bits, that are supported by the symmetric algorithm.

LegalKeySizesValue

대칭 알고리즘에서 지원하는 키 크기(비트 단위)를 지정합니다.Specifies the key sizes, in bits, that are supported by the symmetric algorithm.

ModeValue

대칭 알고리즘에 사용된 암호화 모드를 나타냅니다.Represents the cipher mode used in the symmetric algorithm.

PaddingValue

대칭 알고리즘에 사용된 패딩 모드를 나타냅니다.Represents the padding mode used in the symmetric algorithm.

속성

BlockSize

암호화 작업의 블록 크기(비트 단위)를 가져오거나 설정합니다.Gets or sets the block size, in bits, of the cryptographic operation.

FeedbackSize

암호화 작업의 피드백 크기(비트 단위)를 가져오거나 설정합니다.Gets or sets the feedback size, in bits, of the cryptographic operation.

IV

대칭 알고리즘에 대한 초기화 벡터(IV)를 가져오거나 설정합니다.Gets or sets the initialization vector (IV) for the symmetric algorithm.

Key

대칭 알고리즘에 대한 비밀 키를 가져오거나 설정합니다.Gets or sets the secret key for the symmetric algorithm.

KeySize

대칭 알고리즘에서 사용하는 비밀 키의 크기(비트 단위)를 가져오거나 설정합니다.Gets or sets the size, in bits, of the secret key used by the symmetric algorithm.

LegalBlockSizes

대칭 알고리즘에서 지원하는 블록 크기(비트 단위)를 가져옵니다.Gets the block sizes, in bits, that are supported by the symmetric algorithm.

LegalKeySizes

대칭 알고리즘에서 지원하는 키 크기(비트 단위)를 가져옵니다.Gets the key sizes, in bits, that are supported by the symmetric algorithm.

Mode

대칭 알고리즘의 작업 모드를 가져오거나 설정합니다.Gets or sets the mode for operation of the symmetric algorithm.

Padding

대칭 알고리즘에 사용된 패딩 모드를 가져오거나 설정합니다.Gets or sets the padding mode used in the symmetric algorithm.

메서드

Clear()

SymmetricAlgorithm 클래스에서 사용하는 모든 리소스를 해제합니다.Releases all resources used by the SymmetricAlgorithm class.

Create()

대칭 알고리즘을 수행하는 데 사용되는 기본 암호화 개체를 만듭니다.Creates a default cryptographic object used to perform the symmetric algorithm.

Create(String)

대칭 알고리즘을 수행하는 데 사용되는 지정된 암호화 개체를 만듭니다.Creates the specified cryptographic object used to perform the symmetric algorithm.

CreateDecryptor()

현재 Key 속성 및 초기화 벡터(IV)를 사용하여 대칭 decryptor 개체를 만듭니다.Creates a symmetric decryptor object with the current Key property and initialization vector (IV).

CreateDecryptor(Byte[], Byte[])

파생 클래스에서 재정의된 경우 지정된 Key 속성 및 초기화 벡터(IV)를 사용하여 대칭 decryptor 개체를 만듭니다.When overridden in a derived class, creates a symmetric decryptor object with the specified Key property and initialization vector (IV).

CreateEncryptor()

현재 Key 속성 및 초기화 벡터(IV)를 사용하여 대칭 encryptor 개체를 만듭니다.Creates a symmetric encryptor object with the current Key property and initialization vector (IV).

CreateEncryptor(Byte[], Byte[])

파생 클래스에서 재정의된 경우 지정된 Key 속성 및 초기화 벡터(IV)를 사용하여 대칭 encryptor 개체를 만듭니다.When overridden in a derived class, creates a symmetric encryptor object with the specified Key property and initialization vector (IV).

Dispose()

SymmetricAlgorithm 클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다.Releases all resources used by the current instance of the SymmetricAlgorithm class.

Dispose(Boolean)

SymmetricAlgorithm에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다.Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

Equals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.Determines whether the specified object is equal to the current object.

(다음에서 상속됨 Object)
Finalize()

이 멤버는 Finalize()를 재정의합니다. 자세한 내용은 해당 항목을 참조하세요.This member overrides Finalize(), and more complete documentation might be available in that topic.

가비지 수집기에서 Object를 회수하기 전에 Object가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다.Allows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection.

GenerateIV()

파생 클래스에서 재정의된 경우 알고리즘에 사용할 임의의 초기화 벡터(IV)를 생성합니다.When overridden in a derived class, generates a random initialization vector (IV) to use for the algorithm.

GenerateKey()

파생 클래스에서 재정의된 경우 알고리즘에 사용할 난수 키(Key)를 생성합니다.When overridden in a derived class, generates a random key (Key) to use for the algorithm.

GetHashCode()

기본 해시 함수로 작동합니다.Serves as the default hash function.

(다음에서 상속됨 Object)
GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(다음에서 상속됨 Object)
MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(다음에서 상속됨 Object)
ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(다음에서 상속됨 Object)
ValidKeySize(Int32)

지정된 키 크기를 현재 알고리즘에 사용할 수 있는지 여부를 결정합니다.Determines whether the specified key size is valid for the current algorithm.

명시적 인터페이스 구현

IDisposable.Dispose()

SymmetricAlgorithm에서 사용하는 관리되지 않는 리소스를 해제하고, 관리되는 리소스를 선택적으로 해제할 수 있습니다.Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

적용 대상

추가 정보