Udostępnij za pośrednictwem


SymmetricAlgorithm Klasa

Definicja

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

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

W poniższym przykładzie kodu użyto Aes klasy z określoną Key właściwością i wektorem inicjowania (IV) w celu zaszyfrowania pliku określonego przez inName, i wyprowadza 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.

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 tworzenia ł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, , 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 jego zwolnieniem należy jawnie wywołać metodę Clear na obiekcie , aby wyzerować wszelkie poufne dane w obiekcie. Należy pamiętać, że odzyskiwanie pamięci nie powoduje wyzerowania 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 nieprzydzielonego 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 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ć metodę Dispose z parametrem ustawionym disposing w True celu usunięcia wszystkich zarządzanych i niezarządzanych zasobów skojarzonych z obiektem.

Uwagi dotyczące implementowania

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

KeyValue

Reprezentuje klucz tajny 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 uzupeł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 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 uzupełniania używany w algorytmie symetrycznym.

Metody

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 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 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 uzupełniania.

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

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

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

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

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

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

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

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

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

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

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

Szyfruje dane przy użyciu trybu CFB z określonym trybem uzupeł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 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 uzupeł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.

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

GenerateIV()

Podczas zastępowania w klasie pochodnej generuje losowy wektor inicjowania (IV) do użycia dla algorytmu.

GenerateKey()

Podczas zastępowania 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 wypeł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()

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 uzupełniania.

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

Po zastąpieniu w klasie pochodnej program 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 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ż