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 inicjalizacji (IV), aby zaszyfrować plik określony przez , i zwraca zaszyfrowany wynik do pliku określonego przez inName``outName. Parametry desKey i desIV metody to tablice 8-bajtowe. Aby uruchomić ten przykład, musisz mieć zainstalowany pakiet wysokiego szyfrowania.

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

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 były używane do szyfrowania. Aby algorytm symetryczny był przydatny, klucz tajny musi być znany tylko nadawcy i odbiorcy.

Aes, DES, RC2i 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 zwolnieniem należy jawnie wywołać metodę Clear w obiekcie, aby zerały 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ą do reallokacji. 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 dane klucza lub blok zwykłego tekstu.

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

Uwagi 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

SymmetricAlgorithm()

Inicjuje nowe wystąpienie klasy SymmetricAlgorithm.

Pola

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 w bitach klucza tajnego używanego przez algorytm symetryczny.

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 obsługiwane przez algorytm symetryczny.

ModeValue

Reprezentuje tryb szyfrowania używany w algorytmie symetrycznym.

PaddingValue

Reprezentuje tryb dopełniania używany w algorytmie symetrycznym.

Właściwości

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.

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 dopełniania używany w algorytmie symetrycznym.

Metody

Clear()

Zwalnia wszystkie zasoby używane przez klasę SymmetricAlgorithm .

Create()
Nieaktualne.
Nieaktualne.

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

Create(String)

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 szyfrowania 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 dopełniania.

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

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

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

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

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

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

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

Odszyfrowuje dane przy użyciu trybu CFB z określonym trybem wypełniania 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 wypełniania i rozmiarem opinii.

DecryptEcb(Byte[], PaddingMode)

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

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

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

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

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

Dispose()

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

Dispose(Boolean)

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

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

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

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

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

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

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

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

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

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

Szyfruje dane przy użyciu trybu CFB z określonym trybem wypełniania 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 wypełniania i rozmiarem opinii.

EncryptEcb(Byte[], PaddingMode)

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

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

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

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

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

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
Finalize()

Ten element członkowski przesłania element Finalize(), a dokładniejsza dokumentacja może być dostępna w tym temacie.

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

GenerateIV()

Po przesłonięciu w klasie pochodnej generuje losowy wektor inicjowania (IV) do użycia dla algorytmu.

GenerateKey()

W przypadku zastąpienia w klasie pochodnej generuje losowy klucz (Key) do użycia dla algorytmu.

GetCiphertextLengthCbc(Int32, PaddingMode)

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

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

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

GetCiphertextLengthEcb(Int32, PaddingMode)

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

GetHashCode()

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

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

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

(Odziedziczone po Object)
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 dopełniania.

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

W przypadku zastąpienia w klasie pochodnej próbuje odszyfrować dane do określonego buforu przy użyciu trybu CBC z określonym trybem wypeł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 wypeł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 uzupełniania.

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

Podczas zastępowania w klasie pochodnej program próbuje odszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania.

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 w określonym buforze 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 program próbuje zaszyfrować dane do określonego buforu przy użyciu trybu EBC z określonym trybem uzupełniania.

ValidKeySize(Int32)

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

Jawne implementacje interfejsu

IDisposable.Dispose()

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

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

Dotyczy

Zobacz też