SymmetricAlgorithm Třída

Definice

Představuje abstraktní základní třídu, ze které musí dědit všechny implementace symetrických algoritmů.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
Dědičnost
SymmetricAlgorithm
Odvozené
Atributy
Implementuje

Příklady

Následující příklad kódu používá třídu RijndaelManaged se specifikovanou vlastností Key a inicializační vektor (IV) k zašifrování souboru určeného inNamea výstup šifrovaného výsledku do souboru určeného parametrem 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. Parametry desKey a desIV metody jsou osm bajtových polí.The desKey and desIV parameters to the method are 8-byte arrays. Abyste mohli spustit tento příklad, musíte mít nainstalovanou vysokou šifrovací sadu.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

Poznámky

Třídy, které jsou odvozeny z třídy SymmetricAlgorithm používají režim zřetězení označovaný jako CBC (Cipher Block Chaining), který vyžaduje klíč (Key) a inicializační vektor (IV) k provádění kryptografické transformace dat.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. Chcete-li dešifrovat data zašifrovaná pomocí jedné z SymmetricAlgorithm třídy, je nutné nastavit vlastnost Key a vlastnost IV na stejné hodnoty, které byly použity pro šifrování.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. Aby byl symetrický algoritmus užitečný, tajný klíč musí být známý pouze pro odesílatele a příjemce.For a symmetric algorithm to be useful, the secret key must be known only to the sender and the receiver.

RijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvidera TripleDESCryptoServiceProvider jsou implementace symetrických algoritmů.RijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvider, and TripleDESCryptoServiceProvider are implementations of symmetric algorithms.

Všimněte si, že při použití odvozených tříd není k dispozici dostatek v perspektivě zabezpečení pro vynucené uvolňování paměti po dokončení používání objektu.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. Před uvolněním všech citlivých dat v rámci objektu musíte explicitně zavolat metodu Clear objektu a vyhodnotit tak všechna citlivá data v rámci objektu.You must explicitly call the Clear method on the object to zero out any sensitive data within the object before it is released. Všimněte si, že uvolňování paměti nenulová obsah shromážděných objektů, ale jednoduše označí paměť jako dostupnou pro přerozdělení.Note that garbage collection does not zero out the contents of collected objects but simply marks the memory as available for reallocation. Data obsažená v uvolněném paměťovém objektu se proto můžou pořád vyskytovat v haldě paměti v nepřidělené paměti.Thus the data contained within a garbage collected object may still be present in the memory heap in unallocated memory. V případě kryptografických objektů by tato data mohla obsahovat citlivé informace, jako jsou například klíčová data nebo blok prostého textu.In the case of cryptographic objects, this data could contain sensitive information such as key data or a block of plain text.

Všechny kryptografické třídy v .NET Framework, které uchovávají citlivá data, implementují metodu Clear.All cryptographic classes in the .NET Framework that hold sensitive data implement a Clear method. Při volání metody Clear přepíše veškerá citlivá data v rámci objektu nulami a pak uvolní objekt, aby bylo možné bezpečně uvolnit z paměti.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. Pokud byl objekt vypočítán a uvolněn, měli byste zavolat metodu Dispose s parametrem disposing nastaveným na True pro uvolnění všech spravovaných a nespravovaných prostředků přidružených k objektu.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.

Poznámky pro implementátory

Při dědění z SymmetricAlgorithm třídy je nutné přepsat následující členy: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()a GenerateKey().When you inherit from the SymmetricAlgorithm class, you must override the following members: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV(), and GenerateKey().

Konstruktory

SymmetricAlgorithm()

Inicializuje novou instanci třídy SymmetricAlgorithm třídy.Initializes a new instance of the SymmetricAlgorithm class.

Pole

BlockSizeValue

Představuje velikost bloku v bitech kryptografické operace.Represents the block size, in bits, of the cryptographic operation.

FeedbackSizeValue

Představuje velikost zpětné vazby v bitech kryptografické operace.Represents the feedback size, in bits, of the cryptographic operation.

IVValue

Představuje inicializační vektor (IV) pro symetrický algoritmus.Represents the initialization vector (IV) for the symmetric algorithm.

KeySizeValue

Představuje velikost tajného klíče používaného symetrickým algoritmem v bitech.Represents the size, in bits, of the secret key used by the symmetric algorithm.

KeyValue

Představuje tajný klíč pro symetrický algoritmus.Represents the secret key for the symmetric algorithm.

LegalBlockSizesValue

Určuje velikosti bloků v bitech, které jsou podporovány symetrickým algoritmem.Specifies the block sizes, in bits, that are supported by the symmetric algorithm.

LegalKeySizesValue

Určuje velikosti klíčů v bitech, které jsou podporovány symetrickým algoritmem.Specifies the key sizes, in bits, that are supported by the symmetric algorithm.

ModeValue

Představuje režim šifrování použitý v symetrickém algoritmu.Represents the cipher mode used in the symmetric algorithm.

PaddingValue

Představuje režim odsazení použitý v symetrickém algoritmu.Represents the padding mode used in the symmetric algorithm.

Vlastnosti

BlockSize

Získá nebo nastaví velikost bloku kryptografické operace v bitech.Gets or sets the block size, in bits, of the cryptographic operation.

FeedbackSize

Získá nebo nastaví velikost zpětné vazby v bitech pro šifrovací operace CFB (Cipher Feedback) a zpětná vazba (OFB) pro šifrovací režimy.Gets or sets the feedback size, in bits, of the cryptographic operation for the Cipher Feedback (CFB) and Output Feedback (OFB) cipher modes.

IV

Získá nebo nastaví inicializační vektor (IV) pro symetrický algoritmus.Gets or sets the initialization vector (IV) for the symmetric algorithm.

Key

Získá nebo nastaví tajný klíč pro symetrický algoritmus.Gets or sets the secret key for the symmetric algorithm.

KeySize

Získá nebo nastaví velikost tajného klíče používaného symetrickým algoritmem v bitech.Gets or sets the size, in bits, of the secret key used by the symmetric algorithm.

LegalBlockSizes

Získá velikosti bloků v bitech, které jsou podporovány symetrickým algoritmem.Gets the block sizes, in bits, that are supported by the symmetric algorithm.

LegalKeySizes

Získá velikosti klíčů, které jsou podporovány symetrickým algoritmem v bitech.Gets the key sizes, in bits, that are supported by the symmetric algorithm.

Mode

Získá nebo nastaví režim pro provoz symetrického algoritmu.Gets or sets the mode for operation of the symmetric algorithm.

Padding

Získá nebo nastaví režim odsazení použitý v symetrickém algoritmu.Gets or sets the padding mode used in the symmetric algorithm.

Metody

Clear()

Uvolní všechny prostředky, které používá třída SymmetricAlgorithm.Releases all resources used by the SymmetricAlgorithm class.

Create()

Vytvoří výchozí kryptografický objekt použitý k provedení symetrického algoritmu.Creates a default cryptographic object used to perform the symmetric algorithm.

Create(String)

Vytvoří zadaný kryptografický objekt použitý k provedení symetrického algoritmu.Creates the specified cryptographic object used to perform the symmetric algorithm.

CreateDecryptor()

Vytvoří symetrický objekt dešifrování s aktuální Key vlastností a inicializačního vektoru (IV).Creates a symmetric decryptor object with the current Key property and initialization vector (IV).

CreateDecryptor(Byte[], Byte[])

Při přepsání v odvozené třídě vytvoří objekt symetrického dešifrování se zadanou vlastností Key a inicializačním vektorem (IV).When overridden in a derived class, creates a symmetric decryptor object with the specified Key property and initialization vector (IV).

CreateEncryptor()

Vytvoří symetrický objekt šifry s aktuální vlastností Key a inicializační vektor (IV).Creates a symmetric encryptor object with the current Key property and initialization vector (IV).

CreateEncryptor(Byte[], Byte[])

Při přepsání v odvozené třídě vytvoří objekt symetrického šifrování se zadanou vlastností Key a inicializačním vektorem (IV).When overridden in a derived class, creates a symmetric encryptor object with the specified Key property and initialization vector (IV).

Dispose()

Uvolní všechny prostředky používané aktuální instancí třídy SymmetricAlgorithm.Releases all resources used by the current instance of the SymmetricAlgorithm class.

Dispose(Boolean)

Uvolní nespravované prostředky používané SymmetricAlgorithm a volitelně uvolňuje spravované prostředky.Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

Equals(Object)

Určuje, zda se zadaný objekt rovná aktuálnímu objektu.Determines whether the specified object is equal to the current object.

(Zděděno od Object)
Finalize()

Tento člen přepisuje Finalize()a v tomto tématu může být k dispozici i další úplná dokumentace.This member overrides Finalize(), and more complete documentation might be available in that topic.

Umožňuje Object pokusit se uvolnit prostředky a provést jiné operace čištění před tím, než se Object uvolní uvolňováním paměti.Allows an Object to attempt to free resources and perform other cleanup operations before the Object is reclaimed by garbage collection.

GenerateIV()

Při přepsání v odvozené třídě generuje generátor náhodných inicializací (IV), který se má použít pro algoritmus.When overridden in a derived class, generates a random initialization vector (IV) to use for the algorithm.

GenerateKey()

Při přepsání v odvozené třídě vygeneruje náhodný klíč (Key), který se má použít pro algoritmus.When overridden in a derived class, generates a random key (Key) to use for the algorithm.

GetHashCode()

Slouží jako výchozí funkce hash.Serves as the default hash function.

(Zděděno od Object)
GetType()

Získá Type aktuální instance.Gets the Type of the current instance.

(Zděděno od Object)
MemberwiseClone()

Vytvoří kopii aktuálního Objectbez podstruktury.Creates a shallow copy of the current Object.

(Zděděno od Object)
ToString()

Vrací řetězec, který představuje aktuální objekt.Returns a string that represents the current object.

(Zděděno od Object)
ValidKeySize(Int32)

Určuje, zda je zadaná velikost klíče platná pro aktuální algoritmus.Determines whether the specified key size is valid for the current algorithm.

Explicitní implementace rozhraní

IDisposable.Dispose()

Uvolní nespravované prostředky používané SymmetricAlgorithm a volitelně uvolňuje spravované prostředky.Releases the unmanaged resources used by the SymmetricAlgorithm and optionally releases the managed resources.

Platí pro

Viz také