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ím vektorem (IV) k zašifrování souboru určeného nástrojem inName
a výstupem šifrovaného výsledku do souboru určeného nástrojem outName
. Parametry desKey
a desIV
metody jsou 8-bajtová pole. Abyste mohli spustit tento příklad, musíte mít nainstalovaný balíček s vysokým šifrováním.
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 odvozené z SymmetricAlgorithm třídy používají režim řetězení označovaný jako řetězení šifrových bloků (CBC), který vyžaduje klíč (Key) a inicializační vektor (IV) k provádění kryptografických transformací dat. Chcete-li dešifrovat data, která byla zašifrována pomocí jedné z 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 odesílateli a příjemci.
AesRC2, DES, a TripleDES 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žívání objektu. Je nutné explicitně volat metodu Clear objektu, aby se vynula jakákoli citlivá data v objektu před jeho uvolněním. Upozorňujeme, že uvolňování paměti nevynuluje obsah shromážděných objektů, ale jednoduše označí paměť jako dostupnou pro reallokaci. Proto data obsažená v objektu uvolňování paměti 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 data klíčů 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 objektu nulami a pak objekt uvolní, aby mohl být bezpečně uvolněn z paměti. Když byl objekt vynulován a uvolněn, měli byste poté volat metodu Dispose
s parametrem disposing
nastaveným na na True
odstranění všech spravovaných a nespravovaných prostředků přidružených k objektu.
Poznámky pro implementátory
Když dědíte z SymmetricAlgorithm třídy, musíte 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 kryptografické operace v bitech. |
FeedbackSizeValue |
Představuje velikost zpětné vazby v bitech kryptografické operace. |
IVValue |
Představuje inicializační vektor (IV) symetrického algoritmu. |
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é symetrický algoritmus podporuje. |
LegalKeySizesValue |
Určuje velikosti klíčů v bitech, které symetrický algoritmus podporuje. |
ModeValue |
Představuje režim šifry použitý v symetrických algoritmech. |
PaddingValue |
Představuje režim odsazení použitý v symetrický algoritmus. |
Vlastnosti
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 režimy šifry Šifrová zpětná vazba (CFB) a OFB (Output Feedback). |
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
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ím vektorem (IV). |
CreateEncryptor() |
Vytvoří objekt symetrického šifrování s aktuální Key vlastností a vektorem inicializace (IV). |
CreateEncryptor(Byte[], Byte[]) |
Při přepsání v odvozené třídě vytvoří objekt symetrického encryptoru 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 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 nástrojem 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) |
Š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čí, zda se zadaný objekt rovná aktuálnímu objektu. (Zděděno od Object) |
Finalize() |
Tento člen přepíše Finalize()a v tomto tématu může být k dispozici úplnější dokumentace. Object Umožňuje pokusit se uvolnit prostředky a provést další operace čištění před Object uvolněním paměti uvolňováním paměti. |
GenerateIV() |
Při přepsání v odvozené třídě vygeneruje náhodný inicializační vektor (IV), který se použije pro algoritmus. |
GenerateKey() |
Při přepsání v odvozené třídě vygeneruje náhodný klíč (Key), který se použije pro algoritmus. |
GetCiphertextLengthCbc(Int32, PaddingMode) |
Získá délku šifrového textu s daným režimem odsazení a délku prostého textu v režimu CBC. |
GetCiphertextLengthCfb(Int32, PaddingMode, Int32) |
Získá délku šifrového textu s daným režimem odsazení a délku prostého textu v režimu CFB. |
GetCiphertextLengthEcb(Int32, PaddingMode) |
Získá délku šifrového textu s daným režimem odsazení a délku prostého textu v režimu ECB. |
GetHashCode() |
Slouží jako výchozí hashovací funkce. (Zděděno od Object) |
GetType() |
Získá aktuální Type instanci. (Zděděno od Object) |
MemberwiseClone() |
Vytvoří mělkou kopii aktuálního Objectsouboru . (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 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) |
Pokusy o dešifrování dat 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í š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) |
Pokusy o šifrování dat 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í š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í
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 nástrojem a volitelně uvolní spravované prostředky. |
Platí pro
Viz také
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro