Share via


SymmetricAlgorithm Klasse

Definition

Stellt die abstrakte Basisklasse dar, von der alle Implementierungen von symmetrischen Algorithmen erben müssen.

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
Vererbung
SymmetricAlgorithm
Abgeleitet
Attribute
Implementiert

Beispiele

Im folgenden Codebeispiel wird die Aes -Klasse mit der angegebenen Eigenschaft und dem angegebenen Key Initialisierungsvektor (IV) verwendet, um eine durch inNameangegebene Datei zu verschlüsseln, und gibt das verschlüsselte Ergebnis an die von angegebene Datei aus outName. Die desKey Parameter und desIV für die -Methode sind 8-Byte-Arrays. Zum Ausführen dieses Beispiels muss das Paket mit hoher Verschlüsselung installiert sein.

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

Hinweise

Die von der SymmetricAlgorithm -Klasse abgeleiteten Klassen verwenden einen Verkettungsmodus namens Verschlüsselungsblockverkettung (CBC), der einen Schlüssel (Key) und einen Initialisierungsvektor (IV) benötigt, um kryptografische Transformationen für Daten auszuführen. Zum Entschlüsseln von Daten, die mit einer der SymmetricAlgorithm Klassen verschlüsselt wurden, müssen Sie die Key -Eigenschaft und die IV -Eigenschaft auf die gleichen Werte festlegen, die für die Verschlüsselung verwendet wurden. Damit ein symmetrischer Algorithmus nützlich ist, muss der geheime Schlüssel nur dem Absender und dem Empfänger bekannt sein.

Aes, DES, RC2und TripleDES sind Implementierungen symmetrischer Algorithmen.

Beachten Sie, dass es bei der Verwendung abgeleiteter Klassen aus Sicherheitssicht nicht ausreicht, einfach eine Garbage Collection zu erzwingen, nachdem Sie die Verwendung des Objekts abgeschlossen haben. Sie müssen explizit die Clear -Methode für das -Objekt aufrufen, um vertrauliche Daten innerhalb des Objekts auf null zu setzen, bevor sie freigegeben werden. Beachten Sie, dass die Garbage Collection den Inhalt der gesammelten Objekte nicht auf null ausgibt, sondern einfach den Speicher als verfügbar für die Neuzuordnung markiert. Daher können die Daten, die in einem garbage collection-Objekt enthalten sind, weiterhin im Speicherheap im nicht zugeordneten Speicher vorhanden sein. Im Fall von kryptografischen Objekten können diese Daten vertrauliche Informationen wie Schlüsseldaten oder einen Nur-Text-Block enthalten.

Alle kryptografischen Klassen im .NET Framework, die vertrauliche Daten enthalten, implementieren eine Clear -Methode. Wenn die Methode aufgerufen wird, überschreibt die Clear -Methode alle vertraulichen Daten innerhalb des Objekts mit Nullen und gibt das Objekt dann frei, damit es sicher mit Garbage Collection erfasst werden kann. Wenn das Objekt auf Null gesetzt und freigegeben wurde, sollten Sie die Dispose -Methode aufrufen, deren disposing Parameter auf True festgelegt ist, um alle verwalteten und nicht verwalteten Ressourcen zu verwerfen, die dem Objekt zugeordnet sind.

Hinweise für Ausführende

Wenn Sie von der SymmetricAlgorithm -Klasse erben, müssen Sie die folgenden Member überschreiben: CreateDecryptor(Byte[], Byte[]), CreateEncryptor(Byte[], Byte[]), GenerateIV()und GenerateKey().

Konstruktoren

SymmetricAlgorithm()

Initialisiert eine neue Instanz der SymmetricAlgorithm-Klasse.

Felder

BlockSizeValue

Stellt die Blockgröße des kryptografischen Vorgangs in Bits dar.

FeedbackSizeValue

Stellt die Feedbackgröße des kryptografischen Vorgangs in Bits dar.

IVValue

Stellt den Initialisierungsvektor (IV) für den symmetrischen Algorithmus dar.

KeySizeValue

Stellt die Größe des vom symmetrischen Algorithmus verwendeten geheimen Schlüssels in Bits dar.

KeyValue

Stellt den geheimen Schlüssel für den symmetrischen Algorithmus dar.

LegalBlockSizesValue

Gibt die vom symmetrischen Algorithmus unterstützten Blockgrößen in Bits an.

LegalKeySizesValue

Gibt die vom symmetrischen Algorithmus unterstützten Schlüsselgrößen in Bits an.

ModeValue

Stellt den im symmetrischen Algorithmus verwendeten Verschlüsselungsmodus dar.

PaddingValue

Stellt den im symmetrischen Algorithmus verwendeten Füllzeichenmodus dar.

Eigenschaften

BlockSize

Ruft die Blockgröße des kryptografischen Vorgangs in Bits ab oder legt diese fest.

FeedbackSize

Ruft die Feedbackgröße des kryptografischen Vorgangs für den CFB-Modus (Cipher Feedback, Verschlüsselungsverfahren-Feedback) und den OFB-Modus (Output Feedback, Ausgabefeedback) in Bits ab oder legt diese fest.

IV

Ruft den Initialisierungsvektor (IV) für den symmetrischen Algorithmus ab oder legt diesen fest.

Key

Ruft den geheimen Schlüssel für den symmetrischen Algorithmus ab oder legt diesen fest.

KeySize

Ruft die Größe des geheimen Schlüssels für den symmetrischen Algorithmus in Bits ab oder legt diese fest.

LegalBlockSizes

Ruft die vom symmetrischen Algorithmus unterstützten Blockgrößen in Bits ab.

LegalKeySizes

Ruft die vom symmetrischen Algorithmus unterstützten Schlüsselgrößen in Bits ab.

Mode

Ruft den Modus für die Ausführung des symmetrischen Algorithmus ab oder legt diesen fest.

Padding

Ruft den im symmetrischen Algorithmus verwendeten Füllzeichenmodus ab oder legt diesen fest.

Methoden

Clear()

Gibt alle von der SymmetricAlgorithm-Klasse verwendeten Ressourcen frei.

Create()
Veraltet.
Veraltet.

Erstellt ein Standardkryptografieobjekt zum Ausführen des symmetrischen Algorithmus.

Create(String)
Veraltet.

Erstellt das angegebene Kryptografieobjekt zum Ausführen des symmetrischen Algorithmus.

CreateDecryptor()

Erstellt ein symmetrisches Entschlüsselungsobjekt mit der aktuellen Key-Eigenschaft und dem Initialisierungsvektor (IV).

CreateDecryptor(Byte[], Byte[])

Erstellt beim Überschreiben in einer abgeleiteten Klasse ein symmetrisches Entschlüsselungsobjekt mit der angegebenen Key-Eigenschaft und dem angegebenen Initialisierungsvektor (IV).

CreateEncryptor()

Erstellt ein symmetrisches Verschlüsselungsobjekt mit der aktuellen Key-Eigenschaft und dem aktuellen Initialisierungsvektor (IV).

CreateEncryptor(Byte[], Byte[])

Erstellt beim Überschreiben in einer abgeleiteten Klasse ein symmetrisches Verschlüsselungsobjekt mit der angegebenen Key-Eigenschaft und dem angegebenen Initialisierungsvektor (IV).

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

Entschlüsselt Daten im CBC-Modus mit dem angegebenen Abstandsmodus.

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

Entschlüsselt Daten im CBC-Modus mit dem angegebenen Abstandsmodus.

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

Entschlüsselt Daten im angegebenen Puffer mithilfe des CBC-Modus mit dem angegebenen Abstandsmodus.

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

Entschlüsselt Daten im CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

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

Entschlüsselt Daten im CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

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

Entschlüsselt Daten im angegebenen Puffer mithilfe des CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

DecryptEcb(Byte[], PaddingMode)

Entschlüsselt Daten im ECB-Modus mit dem angegebenen Abstandsmodus.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Entschlüsselt Daten im ECB-Modus mit dem angegebenen Abstandsmodus.

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

Entschlüsselt Daten im angegebenen Puffer mithilfe des ECB-Modus mit dem angegebenen Abstandsmodus.

Dispose()

Gibt alle von der aktuellen Instanz der SymmetricAlgorithm-Klasse verwendeten Ressourcen frei.

Dispose(Boolean)

Gibt die von SymmetricAlgorithm verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

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

Verschlüsselt Daten im CBC-Modus mit dem angegebenen Abstandsmodus.

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

Verschlüsselt Daten im CBC-Modus mit dem angegebenen Abstandsmodus.

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

Verschlüsselt Daten im angegebenen Puffer mithilfe des CBC-Modus mit dem angegebenen Abstandsmodus.

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

Verschlüsselt Daten im CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

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

Verschlüsselt Daten im CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

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

Verschlüsselt Daten im angegebenen Puffer mithilfe des CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

EncryptEcb(Byte[], PaddingMode)

Verschlüsselt Daten im ECB-Modus mit dem angegebenen Abstandsmodus.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Verschlüsselt Daten im ECB-Modus mit dem angegebenen Abstandsmodus.

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

Verschlüsselt Daten im angegebenen Puffer mithilfe des ECB-Modus mit dem angegebenen Abstandsmodus.

Equals(Object)

Bestimmt, ob das angegebene Objekt gleich dem aktuellen Objekt ist.

(Geerbt von Object)
Finalize()

Dieser Member überschreibt Finalize(). Das zugehörige Thema enthält möglicherweise eine umfassendere Dokumentation.

Gibt einem Object Gelegenheit zu dem Versuch, Ressourcen freizugeben und andere Bereinigungen durchzuführen, bevor das Object von der Garbage Collection freigegeben wird.

GenerateIV()

Generiert beim Überschreiben in einer abgeleiteten Klasse einen zufälligen Initialisierungsvektor (IV) für den Algorithmus.

GenerateKey()

Generiert beim Überschreiben in einer abgeleiteten Klasse einen zufälligen Schlüssel (Key) für den Algorithmus.

GetCiphertextLengthCbc(Int32, PaddingMode)

Ruft die Länge eines Verschlüsselungstexts mit einem angegebenen Abstandsmodus und einer Klartextlänge im CBC-Modus ab.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Ruft die Länge eines Chiffretexts mit einem angegebenen Abstandsmodus und einer Klartextlänge im CFB-Modus ab.

GetCiphertextLengthEcb(Int32, PaddingMode)

Ruft die Länge eines Chiffretexts mit einem angegebenen Abstandsmodus und einer Klartextlänge im ECB-Modus ab.

GetHashCode()

Fungiert als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft den Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie des aktuellen Object.

(Geerbt von Object)
ToString()

Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt.

(Geerbt von Object)
TryDecryptCbc(ReadOnlySpan<Byte>, ReadOnlySpan<Byte>, Span<Byte>, Int32, PaddingMode)

Versucht, Daten im angegebenen Puffer mithilfe des CBC-Modus mit dem angegebenen Abstandsmodus zu entschlüsseln.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten in den angegebenen Puffer zu entschlüsseln, wobei der CBC-Modus mit dem angegebenen Abstandsmodus verwendet wird.

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

Versucht, Daten im angegebenen Puffer zu entschlüsseln, indem der CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten in den angegebenen Puffer zu entschlüsseln, wobei der CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße verwendet wird.

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

Versucht, Daten im angegebenen Puffer zu entschlüsseln, wobei der ECB-Modus mit dem angegebenen Auffüllungsmodus verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu entschlüsseln, wobei der ECB-Modus mit dem angegebenen Abstandsmodus verwendet wird.

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

Versucht, Daten im angegebenen Puffer mithilfe des CBC-Modus mit dem angegebenen Auffüllmodus zu verschlüsseln.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu verschlüsseln, wobei der CBC-Modus mit dem angegebenen Abstandsmodus verwendet wird.

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

Versucht, Daten im angegebenen Puffer zu verschlüsseln, indem der CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu verschlüsseln, wobei der CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße verwendet wird.

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

Versucht, Daten im angegebenen Puffer mithilfe des ECB-Modus mit dem angegebenen Abstandsmodus zu verschlüsseln.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu verschlüsseln, wobei der ECB-Modus mit dem angegebenen Abstandsmodus verwendet wird.

ValidKeySize(Int32)

Bestimmt, ob die angegebene Schlüsselgröße für den aktuellen Algorithmus gültig ist.

Explizite Schnittstellenimplementierungen

IDisposable.Dispose()

Diese API unterstützt die Produktinfrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code gedacht.

Gibt die von SymmetricAlgorithm verwendeten nicht verwalteten Ressourcen und optional die verwalteten Ressourcen frei.

Gilt für:

Weitere Informationen