Udostępnij za pośrednictwem


SymmetricAlgorithm Klasa

Definicja

Reprezentuje abstrakcyjną klasę bazową, z której muszą dziedziczyć wszystkie implementacje algorytmów symetrycznych.

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
Dziedziczenie
SymmetricAlgorithm
Pochodne
Atrybuty
Implementuje

Przykłady

Poniższy przykład kodu używa Aes klasy z określoną Key właściwością i wektorem inicjowania (IV) do szyfrowania pliku określonego przez inName, i zwraca zaszyfrowany wynik do pliku określonego przez outName. Parametry desKey i desIV metody to tablice 8-bajtowe. Aby uruchomić ten przykład, musisz mieć zainstalowany pakiet wysokiego szyfrowania.

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

Uwagi

Klasy pochodzące z SymmetricAlgorithm klasy używają trybu łańcucha nazywanego łańcuchem bloków łańcucha (CBC), który wymaga klucza (Key) i wektora inicjowania (IV) do wykonywania przekształceń kryptograficznych na danych. Aby odszyfrować dane zaszyfrowane przy użyciu jednej z SymmetricAlgorithm klas, należy ustawić Key właściwość i IV właściwość na te same wartości, które zostały użyte do szyfrowania. Aby algorytm symetryczny był przydatny, klucz tajny musi być znany tylko nadawcy i odbiorcy.

Aes, , DESRC2i TripleDES to implementacje algorytmów symetrycznych.

Należy pamiętać, że w przypadku używania klas pochodnych nie wystarczy, z perspektywy zabezpieczeń, aby po prostu wymusić odzyskiwanie pamięci po zakończeniu korzystania z obiektu. Przed jej wydaniem należy jawnie wywołać metodę Clear w obiekcie , aby zerować wszystkie poufne dane w obiekcie. Należy pamiętać, że odzyskiwanie pamięci nie powoduje zera zawartości zebranych obiektów, ale po prostu oznacza pamięć jako dostępną dla lokalizacji rzeczywistej. W związku z tym dane zawarte w obiekcie zbieranym przez śmieci mogą nadal znajdować się w stercie pamięci w nieprzydzielonej pamięci. W przypadku obiektów kryptograficznych te dane mogą zawierać poufne informacje, takie jak kluczowe dane lub blok zwykłego tekstu.

Wszystkie klasy kryptograficzne w programie .NET Framework przechowujące poufne dane implementują metodę Clear . Po wywołaniu Clear metoda zastępuje wszystkie poufne dane w obiekcie zerami, a następnie zwalnia obiekt, aby można było bezpiecznie odśmiecać śmieci. Gdy obiekt został zerowany i zwolniony, należy wywołać Dispose metodę z ustawionym parametrem disposing w celu True usunięcia wszystkich zarządzanych i niezarządzanych zasobów skojarzonych z obiektem.

Notatki dotyczące implementowania

Po dziedziczeniu SymmetricAlgorithm z klasy należy zastąpić następujące elementy członkowskie: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()i GenerateKey().

Konstruktory

Nazwa Opis
SymmetricAlgorithm()

Inicjuje nowe wystąpienie klasy SymmetricAlgorithm.

Pola

Nazwa Opis
BlockSizeValue

Reprezentuje rozmiar bloku w bitach operacji kryptograficznych.

FeedbackSizeValue

Reprezentuje rozmiar opinii w bitach operacji kryptograficznych.

IVValue

Reprezentuje wektor inicjowania (IV) dla algorytmu symetrycznego.

KeySizeValue

Reprezentuje rozmiar klucza tajnego używanego przez algorytm symetryczny w bitach.

KeyValue

Reprezentuje klucz tajny dla algorytmu symetrycznego.

LegalBlockSizesValue

Określa rozmiary bloków w bitach, które są obsługiwane przez algorytm symetryczny.

LegalKeySizesValue

Określa rozmiary kluczy w bitach, które są obsługiwane przez algorytm symetryczny.

ModeValue

Reprezentuje tryb szyfrowania używany w algorytmie symetrycznym.

PaddingValue

Reprezentuje tryb wypełnienia używany w algorytmie symetrycznym.

Właściwości

Nazwa Opis
BlockSize

Pobiera lub ustawia rozmiar bloku w bitach operacji kryptograficznych.

FeedbackSize

Pobiera lub ustawia rozmiar opinii w bitach operacji kryptograficznych dla trybów szyfrowania opinii (CFB) i szyfrowania danych wyjściowych (OFB).

IV

Pobiera lub ustawia wektor inicjowania (IV) dla algorytmu symetrycznego.

Key

Pobiera lub ustawia klucz tajny dla algorytmu symetrycznego.

KeySize

Pobiera lub ustawia rozmiar klucza tajnego używanego przez algorytm symetryczny w bitach.

LegalBlockSizes

Pobiera rozmiary bloków w bitach, które są obsługiwane przez algorytm symetryczny.

LegalKeySizes

Pobiera rozmiary kluczy w bitach, które są obsługiwane przez algorytm symetryczny.

Mode

Pobiera lub ustawia tryb działania algorytmu symetrycznego.

Padding

Pobiera lub ustawia tryb wypełnienia używany w algorytmie symetrycznym.

Metody

Nazwa Opis
Clear()

Zwalnia wszystkie zasoby używane przez klasę SymmetricAlgorithm .

Create()
Przestarzałe.
Przestarzałe.

Tworzy domyślny obiekt kryptograficzny używany do wykonywania algorytmu symetrycznego.

Create(String)
Przestarzałe.

Tworzy określony obiekt kryptograficzny używany do wykonywania algorytmu symetrycznego.

CreateDecryptor()

Tworzy obiekt odszyfrowywania symetrycznego z bieżącą Key właściwością i wektorem inicjowania (IV).

CreateDecryptor(Byte[], Byte[])

Po zastąpieniu w klasie pochodnej tworzy obiekt odszyfrowywania symetrycznego z określoną Key właściwością i wektorem inicjowania (IV).

CreateEncryptor()

Tworzy obiekt szyfrowania symetrycznego z bieżącą Key właściwością i wektorem inicjowania (IV).

CreateEncryptor(Byte[], Byte[])

Po zastąpieniu w klasie pochodnej tworzy obiekt szyfratora symetrycznego z określoną Key właściwością i wektorem inicjowania (IV).

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

Odszyfrowuje dane przy użyciu trybu CBC z określonym trybem uzupełniania.

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

Odszyfrowuje dane przy użyciu trybu CBC z określonym trybem uzupełniania.

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

Odszyfrowuje dane do określonego buforu przy użyciu trybu CBC z określonym trybem dopełnienia.

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

Odszyfrowuje dane przy użyciu trybu CFB z określonym trybem wypełnienia i rozmiarem opinii.

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

Odszyfrowuje dane przy użyciu trybu CFB z określonym trybem wypełnienia i rozmiarem opinii.

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

Odszyfrowuje dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii.

DecryptEcb(Byte[], PaddingMode)

Odszyfrowuje dane przy użyciu trybu EBC z określonym trybem uzupełniania.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Odszyfrowuje dane przy użyciu trybu EBC z określonym trybem uzupełniania.

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

Odszyfrowuje dane do określonego buforu przy użyciu trybu EBC z określonym trybem dopełnienia.

Dispose()

Zwalnia wszystkie zasoby używane przez bieżące wystąpienie SymmetricAlgorithm klasy.

Dispose(Boolean)

Zwalnia niezarządzane zasoby używane przez SymmetricAlgorithm program i opcjonalnie zwalnia zarządzane zasoby.

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

Szyfruje dane przy użyciu trybu CBC z określonym trybem dopełnienia.

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

Szyfruje dane przy użyciu trybu CBC z określonym trybem dopełnienia.

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

Szyfruje dane do określonego buforu przy użyciu trybu CBC z określonym trybem dopełnienia.

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

Szyfruje dane przy użyciu trybu CFB z określonym trybem dopełnienia i rozmiarem opinii.

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

Szyfruje dane przy użyciu trybu CFB z określonym trybem dopełnienia i rozmiarem opinii.

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

Szyfruje dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii.

EncryptEcb(Byte[], PaddingMode)

Szyfruje dane przy użyciu trybu EBC z określonym trybem uzupełniania.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Szyfruje dane przy użyciu trybu EBC z określonym trybem uzupełniania.

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

Szyfruje dane do określonego buforu przy użyciu trybu EBC z określonym trybem dopełnienia.

Equals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.

(Odziedziczone po Object)
Finalize()

Ten element członkowski zastępuje pełną dokumentację, a bardziej kompletna dokumentacja może być dostępna w tym temacie Finalize().

Umożliwia próbę Object zwolnienia zasobów i wykonania innych operacji oczyszczania przed odzyskaniem Object pamięci przez odzyskiwanie pamięci.

GenerateIV()

Po zastąpieniu w klasie pochodnej generuje losowy wektor inicjowania (IV) do użycia dla algorytmu.

GenerateKey()

Po zastąpieniu w klasie pochodnej generuje losowy klucz (Key) do użycia dla algorytmu.

GetCiphertextLengthCbc(Int32, PaddingMode)

Pobiera długość szyfrowania tekstu z danym trybem wypełnienia i długością zwykłego tekstu w trybie CBC.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Pobiera długość szyfrowania tekstu z danym trybem dopełnienia i długością zwykłego tekstu w trybie CFB.

GetCiphertextLengthEcb(Int32, PaddingMode)

Pobiera długość szyfrowania tekstu z danym trybem wypełnienia i długością zwykłego tekstu w trybie EBC.

GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Pobiera Type bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Object.

(Odziedziczone po Object)
SetKey(ReadOnlySpan<Byte>)

Ustawia klucz dla tego wystąpienia.

SetKeyCore(ReadOnlySpan<Byte>)

Ustawia klucz dla tego wystąpienia.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Próbuje odszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania.

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

Po zastąpieniu w klasie pochodnej próbuje odszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania.

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

Próbuje odszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii.

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

Po zastąpieniu w klasie pochodnej próbuje odszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii.

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

Próbuje odszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem dopełnienia.

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

Po zastąpieniu w klasie pochodnej próbuje odszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem wypełnienia.

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

Próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania.

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

Po zastąpieniu w klasie pochodnej próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem uzupełniania.

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

Próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii.

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

Po zastąpieniu w klasie pochodnej próbuje zaszyfrować dane do określonego buforu przy użyciu trybu CFB z określonym trybem uzupełniania i rozmiarem opinii.

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

Próbuje zaszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania.

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

Po zastąpieniu w klasie pochodnej próbuje zaszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem dopełnienia.

ValidKeySize(Int32)

Określa, czy określony rozmiar klucza jest prawidłowy dla bieżącego algorytmu.

Jawne implementacje interfejsu

Nazwa Opis
IDisposable.Dispose()

Ten interfejs API obsługuje infrastrukturę produktu i nie jest przeznaczony do użycia bezpośrednio z poziomu kodu.

Zwalnia niezarządzane zasoby używane przez SymmetricAlgorithm program i opcjonalnie zwalnia zarządzane zasoby.

Dotyczy

Zobacz też