SymmetricAlgorithm Třída

Definice

Představuje abstraktní základní třídu, ze které musí dědit všechny implementace symetrických algoritmů.

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
Dědičnost
SymmetricAlgorithm
Odvozené
Atributy
Implementuje

Příklady

Následující příklad kódu používá Aes třídu se zadaným Key vlastností a inicializační vektor ( IV ) k zašifrování souboru určeného parametrem inName a výstup zašifrovaného výsledku do souboru určeného parametrem outName . desKeyParametry a desIV pro metodu jsou pole o velikosti 8 bajtů. Abyste mohli spustit tento příklad, musíte mít nainstalovanou vysokou šifrovací sadu.

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

Poznámky

Třídy, které jsou odvozeny z SymmetricAlgorithm třídy, používají režim zřetězení označovaný jako CBC (Cipher Block Chaining), který vyžaduje klíč ( Key ) a inicializační vektor ( IV ) pro provedení kryptografických transformací dat. Chcete-li dešifrovat data zašifrovaná pomocí jedné ze SymmetricAlgorithm tříd, je nutné nastavit Key vlastnost a IV vlastnost na stejné hodnoty, které byly použity pro šifrování. Aby byl symetrický algoritmus užitečný, tajný klíč musí být známý pouze pro odesílatele a příjemce.

Aes, DES , RC2 a TripleDES jsou implementace symetrických algoritmů.

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. ClearPřed uvolněním všech citlivých dat v rámci objektu musíte explicitně zavolat metodu na objekt. 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í. 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. 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.

všechny kryptografické třídy v .NET Framework, které uchovávají citlivá data, implementují Clear metodu. Při volání Clear metody přepíše všechna citlivá data v rámci objektu nulami a pak uvolní objekt, aby bylo možné bezpečně uvolnit z paměti. Pokud byl objekt vypočítán a uvolněn, měli byste zavolat Dispose metodu s disposing parametrem nastaveným na True k uvolnění všech spravovaných a nespravovaných prostředků přidružených k objektu.

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() .

Konstruktory

SymmetricAlgorithm()

Inicializuje novou instanci SymmetricAlgorithm třídy.

Pole

BlockSizeValue

Představuje velikost bloku v bitech kryptografické operace.

FeedbackSizeValue

Představuje velikost zpětné vazby v bitech kryptografické operace.

IVValue

Představuje inicializační vektor ( IV ) pro symetrický algoritmus.

KeySizeValue

Představuje velikost tajného klíče používaného symetrickým algoritmem v bitech.

KeyValue

Představuje tajný klíč symetrického algoritmu.

LegalBlockSizesValue

Určuje velikosti bloků v bitech, které podporuje symetrický algoritmus.

LegalKeySizesValue

Určuje velikosti klíčů v bitech, které podporuje symetrický algoritmus.

ModeValue

Představuje režim šifrování použitý v symetrickém algoritmu.

PaddingValue

Představuje režim odsazení použitý v symetrickém algoritmu.

Vlastnosti

BlockSize

Získá nebo nastaví velikost bloku kryptografické operace v bitech.

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.

IV

Získá nebo nastaví inicializační vektor ( IV ) pro symetrický algoritmus.

Key

Získá nebo nastaví tajný klíč pro symetrický algoritmus.

KeySize

Získá nebo nastaví velikost tajného klíče používaného symetrickým algoritmem v bitech.

LegalBlockSizes

Získá velikosti bloků v bitech, které podporuje symetrický algoritmus.

LegalKeySizes

Získá velikosti klíčů v bitech, které podporuje symetrický algoritmus.

Mode

Získá nebo nastaví režim pro provoz symetrického algoritmu.

Padding

Získá nebo nastaví režim odsazení použitý v symetrickém algoritmu.

Metody

Clear()

Uvolní všechny prostředky používané SymmetricAlgorithm třídou.

Create()
Zastaralé.

Vytvoří výchozí kryptografický objekt použitý k provedení symetrického algoritmu.

Create(String)

Vytvoří zadaný kryptografický objekt použitý k provedení symetrického algoritmu.

CreateDecryptor()

Vytvoří symetrický objekt dešifrování s aktuální Key vlastností a inicializačním vektorem ( IV ).

CreateDecryptor(Byte[], Byte[])

Při přepsání v odvozené třídě vytvoří objekt symetrického dešifrování se zadanou Key vlastností a inicializačním vektorem ( IV ).

CreateEncryptor()

Vytvoří symetrický objekt šifry s aktuální Key vlastností a inicializačním vektorem ( IV ).

CreateEncryptor(Byte[], Byte[])

Při přepsání v odvozené třídě vytvoří objekt symetrického šifrování se zadanou Key vlastností a inicializačním vektorem ( IV ).

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

Dešifruje data pomocí režimu CBC se zadaným režimem výplně.

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

Dešifruje data pomocí režimu CBC se zadaným režimem výplně.

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

Dešifruje data do zadané vyrovnávací paměti pomocí režimu CBC se zadaným režimem výplně.

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

Dešifruje data pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Dešifruje data pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Dešifruje data do zadané vyrovnávací paměti pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

DecryptEcb(Byte[], PaddingMode)

Dešifruje data pomocí režimu ECB se zadaným režimem vyplňování.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Dešifruje data pomocí režimu ECB se zadaným režimem vyplňování.

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

Dešifruje data do zadané vyrovnávací paměti pomocí režimu ECB se zadaným režimem vyplňování.

Dispose()

Uvolní všechny prostředky používané aktuální instancí SymmetricAlgorithm třídy.

Dispose(Boolean)

Uvolní nespravované prostředky používané SymmetricAlgorithm a volitelně uvolňuje spravované prostředky.

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

Šifruje data pomocí režimu CBC se zadaným režimem odsazení.

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

Šifruje data pomocí režimu CBC se zadaným režimem odsazení.

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

Šifruje data do zadané vyrovnávací paměti pomocí režimu CBC se zadaným režimem odsazení.

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

Šifruje data pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Šifruje data pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Šifruje data do zadané vyrovnávací paměti pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

EncryptEcb(Byte[], PaddingMode)

Šifruje data pomocí režimu FUNKCE s určeným režimem odsazení.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Šifruje data pomocí režimu FUNKCE s určeným režimem odsazení.

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

Zašifruje data do zadané vyrovnávací paměti pomocí režimu ECB se zadaným režimem vyplňování.

Equals(Object)

Určí, zda se zadaný objekt rovná aktuálnímu objektu.

(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.

Umožňuje Object pokus o uvolnění prostředků a provádění dalších operací vyčištění před tím, než Object se uvolní uvolňováním paměti.

GenerateIV()

Při přepsání v odvozené třídě vygeneruje generátor náhod ( IV ) pro použití pro algoritmus.

GenerateKey()

Při přepsání v odvozené třídě vygeneruje náhodný klíč (), Key který se má použít pro algoritmus.

GetCiphertextLengthCbc(Int32, PaddingMode)

Získá délku šifrovaného textu s daným režimem odsazení a délkou prostého textu v režimu CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Získá délku šifrovaného textu s daným režimem odsazení a délkou prostého textu v režimu CFB.

GetCiphertextLengthEcb(Int32, PaddingMode)

Získá délku šifrovaného textu s daným režimem odsazení a délkou prostého textu v režimu ECB.

GetHashCode()

Slouží jako výchozí funkce hash.

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

Type Získá aktuální instanci.

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

Vytvoří použádnou kopii aktuálního souboru Object.

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

Vrátí řetězec, který představuje aktuální objekt.

(Zděděno od Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Pokusí se dešifrovat data do zadané vyrovnávací paměti pomocí režimu CBC se zadaným režimem odsazení.

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

Při přepsání v odvozené třídě se pokusí dešifrovat data do zadané vyrovnávací paměti pomocí režimu CBC se zadaným režimem odsazení.

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

Pokusí se dešifrovat data do zadané vyrovnávací paměti pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Při přepsání v odvozené třídě se nástroj pokusí dešifrovat data do zadané vyrovnávací paměti pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Pokusí se dešifrovat data do zadané vyrovnávací paměti pomocí režimu FUNKCE s určeným režimem odsazení.

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

Při přepsání v odvozené třídě se pokusí dešifrovat data do zadané vyrovnávací paměti pomocí režimu FUNKCE s určeným režimem odsazení.

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

Pokusí se zašifrovat data do zadané vyrovnávací paměti pomocí režimu CBC se zadaným režimem odsazení.

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

Při přepsání v odvozené třídě se pokusí zašifrovat data do zadané vyrovnávací paměti pomocí režimu CBC se zadaným režimem odsazení.

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

Pokusí se zašifrovat data do zadané vyrovnávací paměti pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Při přepsání v odvozené třídě se nástroj pokusí zašifrovat data do zadané vyrovnávací paměti pomocí režimu CFB se zadaným režimem odsazení a velikostí zpětné vazby.

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

Pokusí se zašifrovat data do zadané vyrovnávací paměti pomocí režimu FUNKCE s určeným režimem odsazení.

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

Při přepsání v odvozené třídě se pokusí o zašifrování dat do zadané vyrovnávací paměti pomocí režimu ECB se zadaným režimem vyplňování.

ValidKeySize(Int32)

Určuje, zda je zadaná velikost klíče platná pro aktuální algoritmus.

Explicitní implementace rozhraní

IDisposable.Dispose()

Toto rozhraní API podporuje produktovou infrastrukturu a není určené k použití přímo z uživatelského kódu.

Uvolní nespravované prostředky používané objektem a SymmetricAlgorithm volitelně uvolní spravované prostředky.

Platí pro

Viz také