SymmetricAlgorithm Třída
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 zadanou Key vlastností a inicializační vektor (IV) k zašifrování souboru určeného pomocí inNamea výstupem šifrovaného výsledku do souboru určeného outName. Parametry desKey metody desIV jsou 8 bajtová pole. Abyste mohli tento příklad spustit, musíte mít nainstalovanou sadu High Encryption Pack.
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 odvozené z SymmetricAlgorithm třídy používají zřetězený režim označovaný jako řetězení bloků šifer (CBC), který vyžaduje klíč (Key) a inicializační vektor (IV) k provádění kryptografických transformací dat. Chcete-li dešifrovat data zašifrovaná pomocí jedné z SymmetricAlgorithm tříd, je nutné nastavit Key vlastnost a IV vlastnost na stejné hodnoty, které byly použity k šifrování. Aby byl symetrický algoritmus užitečný, tajný klíč musí být znám pouze odesílateli a příjemci.
Aes, DESa RC2TripleDES jsou implementace symetrických algoritmů.
Všimněte si, že při použití odvozených tříd nestačí z hlediska zabezpečení jednoduše vynutit uvolňování paměti po dokončení použití objektu. Před uvolněním je nutné explicitně volat metodu Clear objektu, aby se nevynula žádná citlivá data v objektu. Všimněte si, že uvolňování paměti nenuluje obsah shromážděných objektů, ale jednoduše označí paměť jako dostupnou pro relokaci. Data obsažená v objektu uvolňování paměti proto mohou být stále přítomna v haldě paměti v nepřidělené paměti. V případě kryptografických objektů můžou tato data obsahovat citlivé informace, jako jsou klíčová data nebo blok prostého textu.
Všechny kryptografické třídy v rozhraní .NET Framework, které obsahují citlivá data, implementují metodu Clear . Při zavolání Clear metoda přepíše všechna citlivá data v rámci objektu nulami a pak uvolní objekt tak, aby bylo možné bezpečně uvolňování paměti. Pokud byl objekt nulový a uvolněný, měli byste volat metodu Dispose s parametrem disposing nastaveným tak, aby True se uvolnily všechny spravované a nespravované prostředky přidružené 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
| Name | Description |
|---|---|
| SymmetricAlgorithm() |
Inicializuje novou instanci SymmetricAlgorithm třídy. |
Pole
| Name | Description |
|---|---|
| BlockSizeValue |
Představuje velikost bloku kryptografické operace v bitech. |
| 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íč pro symetrický algoritmus. |
| LegalBlockSizesValue |
Určuje velikosti bloků v bitech, které jsou podporovány symetrickým algoritmem. |
| LegalKeySizesValue |
Určuje velikosti klíčů v bitech, které podporuje symetrický algoritmus. |
| ModeValue |
Představuje režim šifry používaný v symetrickém algoritmu. |
| PaddingValue |
Představuje režim odsazení použitý v symetrickém algoritmu. |
Vlastnosti
| Name | Description |
|---|---|
| BlockSize |
Získá nebo nastaví velikost bloku v bitech kryptografické operace. |
| FeedbackSize |
Získá nebo nastaví velikost zpětné vazby v bitech kryptografické operace pro šifrovou zpětnou vazbu (CFB) a výstupní zpětné vazby (OFB) režimy šifry. |
| 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é jsou podporovány symetrickým algoritmem. |
| LegalKeySizes |
Získá velikosti klíčů v bitech, které jsou podporovány symetrickým algoritmem. |
| Mode |
Získá nebo nastaví režim pro provoz symetrického algoritmu. |
| Padding |
Získá nebo nastaví režim odsazení použitý v symetrický algoritmus. |
Metody
| Name | Description |
|---|---|
| Clear() |
Uvolní všechny prostředky používané SymmetricAlgorithm třídou. |
| Create() |
Zastaralé.
Zastaralé.
Vytvoří výchozí kryptografický objekt použitý k provedení symetrického algoritmu. |
| Create(String) |
Zastaralé.
Vytvoří zadaný kryptografický objekt použitý k provedení symetrického algoritmu. |
| CreateDecryptor() |
Vytvoří symetrický dešifrovací objekt s aktuální Key vlastností a inicializačním vektorem (IV). |
| CreateDecryptor(Byte[], Byte[]) |
Při přepsání v odvozené třídě vytvoří symetrický dešifrovací objekt se zadanou Key vlastností a inicializační vektor (IV). |
| CreateEncryptor() |
Vytvoří symetrický objekt encryptoru s aktuální Key vlastností a inicializační vektor (IV). |
| CreateEncryptor(Byte[], Byte[]) |
Při přepsání v odvozené třídě vytvoří symetrický encryptor objekt se zadanou Key vlastností a inicializační vektor (IV). |
| DecryptCbc(Byte[], Byte[], PaddingMode) |
Dešifruje data pomocí režimu CBC se zadaným režimem odsazení. |
| DecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, PaddingMode) |
Dešifruje data pomocí režimu CBC se zadaným režimem odsazení. |
| 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 odsazení. |
| 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 odsazení. |
| DecryptEcb(ReadOnlySpan<Byte>, PaddingMode) |
Dešifruje data pomocí režimu ECB se zadaným režimem odsazení. |
| DecryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode) |
Dešifruje data do zadané vyrovnávací paměti pomocí režimu ECB se zadaným režimem odsazení. |
| 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ě uvolní 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) |
Zaš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 ECB se zadaným režimem odsazení. |
| EncryptEcb(ReadOnlySpan<Byte>, PaddingMode) |
Šifruje data pomocí režimu ECB se zadaným režimem odsazení. |
| EncryptEcb(ReadOnlySpan<Byte>, Span<Byte>, PaddingMode) |
Šifruje data do zadané vyrovnávací paměti pomocí režimu ECB se zadaným režimem odsazení. |
| Equals(Object) |
Určuje, zda je zadaný objekt roven 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 podrobnější dokumentace. Object Umožňuje pokus o uvolnění prostředků a provádění dalších operací čištění před Object uvolněním paměti. |
| GenerateIV() |
Při přepsání v odvozené třídě vygeneruje náhodný inicializační vektor (IV) pro použití algoritmu. |
| GenerateKey() |
Při přepsání v odvozené třídě vygeneruje náhodný klíč (Key) pro použití algoritmu. |
| GetCiphertextLengthCbc(Int32, PaddingMode) |
Získá délku šifertextu s daným režimem odsazení a délkou prostého textu v režimu CBC. |
| GetCiphertextLengthCfb(Int32, PaddingMode, Int32) |
Získá délku šifertextu s daným režimem odsazení a délkou prostého textu v režimu CFB. |
| GetCiphertextLengthEcb(Int32, PaddingMode) |
Získá délku šifertextu 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() |
Získá Type aktuální instance. (Zděděno od Object) |
| MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Object. (Zděděno od Object) |
| SetKey(ReadOnlySpan<Byte>) |
Nastaví klíč pro tuto instanci. |
| SetKeyCore(ReadOnlySpan<Byte>) |
Nastaví klíč pro tuto instanci. |
| 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 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 ECB se zadaný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 ECB se zadaným režimem odsazení. |
| TryEncryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode) |
Pokusí se š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 š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 pokusí š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 šifrovat data do zadané vyrovnávací paměti pomocí režimu ECB se zadaným režimem odsazení. |
| TryEncryptEcbCore(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 ECB se zadaným režimem odsazení. |
| ValidKeySize(Int32) |
Určuje, zda je zadaná velikost klíče platná pro aktuální algoritmus. |
Explicitní implementace rozhraní
| Name | Description |
|---|---|
| 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é SymmetricAlgorithm a volitelně uvolní spravované prostředky. |