Freigeben über


SymmetricAlgorithm Klasse

Definition

Stellt die abstrakte Basisklasse dar, von der alle Implementierungen symmetrischer 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 Key Eigenschaft und dem Initialisierungsvektor (IV) verwendet, um eine durch die Datei angegebene inNameDatei zu verschlüsseln und das verschlüsselte Ergebnis an die durch outName. Die desKey Parameter für desIV die Methode sind 8-Byte-Arrays. Sie müssen das Hochverschlüsselungspaket installiert haben, um dieses Beispiel auszuführen.

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 Klassen, die von der SymmetricAlgorithm Klasse abgeleitet werden, verwenden einen Verkettungsmodus namens Chiffreblockchaining (CBC), der einen Schlüssel () und einen Initialisierungsvektor (KeyIV) benötigt, um kryptografische Transformationen für Daten durchzuführen. Um Daten zu entschlüsseln, 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 sein kann, muss der geheime Schlüssel nur für den Absender und den Empfänger bekannt sein.

Aes, DES, RC2und TripleDES sind Implementierungen symmetrischer Algorithmen.

Beachten Sie, dass die Verwendung abgeleiteter Klassen aus Sicherheitsgründen nicht ausreicht, um eine Garbage Collection einfach zu erzwingen, nachdem Sie das Objekt verwendet haben. Sie müssen die Clear Methode für das Objekt explizit aufrufen, um alle vertraulichen Daten innerhalb des Objekts auf null zu setzen, bevor sie freigegeben wird. Beachten Sie, dass die Garbage Collection den Inhalt der erfassten Objekte nicht ausläuft, sondern einfach den Speicher als verfügbar für die Neuverteilung markiert. Daher sind die Daten, die in einem Garbage Collection-Objekt enthalten sind, möglicherweise noch im Speicherhap im nicht zugewiesenen Speicher vorhanden. Bei 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 garbage collection werden kann. Wenn das Objekt null und losgelassen wurde, sollten Sie die Dispose Methode mit dem disposing Parameter aufrufen, der so festgelegt ist, dass True alle verwalteten und nicht verwalteten Ressourcen gelöscht werden, 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[]), und GenerateKey()GenerateIV().

Konstruktoren

Name Beschreibung
SymmetricAlgorithm()

Initialisiert eine neue Instanz der SymmetricAlgorithm-Klasse.

Felder

Name Beschreibung
BlockSizeValue

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

FeedbackSizeValue

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

IVValue

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

KeySizeValue

Stellt die Größe des geheimen Schlüssels in Bits dar, der vom symmetrischen Algorithmus verwendet wird.

KeyValue

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

LegalBlockSizesValue

Gibt die Blockgrößen in Bits an, die vom symmetrischen Algorithmus unterstützt werden.

LegalKeySizesValue

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

ModeValue

Stellt den verschlüsselungsmodus dar, der im symmetrischen Algorithmus verwendet wird.

PaddingValue

Stellt den Abstandsmodus dar, der im symmetrischen Algorithmus verwendet wird.

Eigenschaften

Name Beschreibung
BlockSize

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

FeedbackSize

Ruft die Feedbackgröße in Bits des kryptografischen Vorgangs für die Verschlüsselungsrückmeldungsmodi (CFB) und Output Feedback (OFB) ab oder legt sie fest.

IV

Dient zum Abrufen oder Festlegen des Initialisierungsvektors (IV) für den symmetrischen Algorithmus.

Key

Dient zum Abrufen oder Festlegen des geheimen Schlüssels für den symmetrischen Algorithmus.

KeySize

Ruft die Größe des geheimen Schlüssels in Bits ab, der vom symmetrischen Algorithmus verwendet wird, oder legt diese fest.

LegalBlockSizes

Ruft die Blockgrößen in Bits ab, die vom symmetrischen Algorithmus unterstützt werden.

LegalKeySizes

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

Mode

Ruft den Modus für den Betrieb des symmetrischen Algorithmus ab oder legt den Modus fest.

Padding

Ruft den Abstandsmodus ab, der im symmetrischen Algorithmus verwendet wird, oder legt diesen fest.

Methoden

Name Beschreibung
Clear()

Gibt alle von der SymmetricAlgorithm Klasse verwendeten Ressourcen frei.

Create()
Veraltet.
Veraltet.

Erstellt ein standardmäßiges kryptografisches Objekt, das zum Ausführen des symmetrischen Algorithmus verwendet wird.

Create(String)
Veraltet.

Erstellt das angegebene kryptografische Objekt, das zum Ausführen des symmetrischen Algorithmus verwendet wird.

CreateDecryptor()

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

CreateDecryptor(Byte[], Byte[])

Wenn eine abgeleitete Klasse überschrieben wird, wird ein symmetrisches Entschlüsselungsobjekt mit der angegebenen Key Eigenschaft und dem Initialisierungsvektor (IV) erstellt.

CreateEncryptor()

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

CreateEncryptor(Byte[], Byte[])

Wenn eine abgeleitete Klasse überschrieben wird, wird ein symmetrisches Verschlüsselungsobjekt mit der angegebenen Key Eigenschaft und dem Initialisierungsvektor (IV) erstellt.

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

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

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

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

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

Entschlüsselt Daten in den angegebenen Puffer, wobei der CBC-Modus mit dem angegebenen Abstandsmodus verwendet wird.

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

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

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

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

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

Entschlüsselt Daten in den angegebenen Puffer, wobei der CFB-Modus mit dem angegebenen Abstandsmodus und der Feedbackgröße verwendet wird.

DecryptEcb(Byte[], PaddingMode)

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

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

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

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

Entschlüsselt Daten in den angegebenen Puffer, wobei der ECB-Modus mit dem angegebenen Abstandsmodus verwendet wird.

Dispose()

Gibt alle Ressourcen frei, die von der aktuellen Instanz der SymmetricAlgorithm Klasse verwendet werden.

Dispose(Boolean)

Gibt die nicht verwalteten Ressourcen frei, die von den SymmetricAlgorithm verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei.

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

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

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

Verschlüsselt Daten mithilfe des 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 mithilfe des CFB-Modus mit dem angegebenen Abstandsmodus und der Feedbackgröße.

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

Verschlüsselt Daten mithilfe des CFB-Modus mit dem angegebenen Abstandsmodus und der 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 Feedbackgröße.

EncryptEcb(Byte[], PaddingMode)

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

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Verschlüsselt Daten mithilfe des 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 dem aktuellen Objekt entspricht.

(Geerbt von Object)
Finalize()

Dieses Element setzt außer Kraft Finalize(), und in diesem Thema sind möglicherweise ausführlichere Dokumentationen verfügbar.

Ermöglicht es einem Object Versuch, Ressourcen freizugeben und andere Bereinigungsvorgänge auszuführen, bevor die Object Garbage Collection erneut beansprucht wird.

GenerateIV()

Wenn eine abgeleitete Klasse überschrieben wird, wird ein zufälliger Initialisierungsvektor (IV) generiert, der für den Algorithmus verwendet werden soll.

GenerateKey()

Wenn sie in einer abgeleiteten Klasse überschrieben wird, wird ein Zufallsschlüssel (Key) generiert, der für den Algorithmus verwendet werden soll.

GetCiphertextLengthCbc(Int32, PaddingMode)

Ruft die Länge eines Chiffretexts mit einem bestimmten Abstandsmodus und der Nur-Text-Länge im CBC-Modus ab.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Ruft die Länge eines Chiffretexts mit einem bestimmten Abstandsmodus und der Nur-Text-Länge im CFB-Modus ab.

GetCiphertextLengthEcb(Int32, PaddingMode)

Ruft die Länge eines Chiffretexts mit einem bestimmten Abstandsmodus und der Nur-Text-Länge im ECB-Modus ab.

GetHashCode()

Dient als Standardhashfunktion.

(Geerbt von Object)
GetType()

Ruft die Type der aktuellen Instanz ab.

(Geerbt von Object)
MemberwiseClone()

Erstellt eine flache Kopie der aktuellen Object.

(Geerbt von Object)
SetKey(ReadOnlySpan<Byte>)

Legt den Schlüssel für diese Instanz fest.

SetKeyCore(ReadOnlySpan<Byte>)

Legt den Schlüssel für diese Instanz fest.

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 in den angegebenen Puffer zu entschlüsseln, wobei der CBC-Modus mit dem angegebenen Abstandsmodus verwendet wird.

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

Wenn sie in einer abgeleiteten Klasse überschrieben werden, versucht, 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 in den angegebenen Puffer zu entschlüsseln, wobei der CFB-Modus mit dem angegebenen Abstandsmodus und der Feedbackgröße verwendet wird.

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

Wenn sie in einer abgeleiteten Klasse überschrieben werden, versucht, Daten in den angegebenen Puffer zu entschlüsseln, wobei DER CFB-Modus mit dem angegebenen Abstandsmodus und der Feedbackgröße verwendet wird.

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

Versucht, Daten in den angegebenen Puffer zu entschlüsseln, wobei der ECB-Modus mit dem angegebenen Abstandsmodus verwendet wird.

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

Wenn sie in einer abgeleiteten Klasse überschrieben werden, versucht, Daten im angegebenen Puffer mithilfe des ECB-Modus mit dem angegebenen Abstandsmodus zu entschlüsseln.

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

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

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

Wenn sie in einer abgeleiteten Klasse überschrieben werden, versucht, Daten im angegebenen Puffer mithilfe des CBC-Modus mit dem angegebenen Abstandsmodus zu verschlüsseln.

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

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

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

Wenn sie in einer abgeleiteten Klasse überschrieben werden, versucht, Daten in den angegebenen Puffer zu verschlüsseln, wobei DER CFB-Modus mit dem angegebenen Abstandsmodus und der 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)

Wenn sie in einer abgeleiteten Klasse überschrieben werden, versucht, Daten im angegebenen Puffer mithilfe des ECB-Modus mit dem angegebenen Abstandsmodus zu verschlüsseln.

ValidKeySize(Int32)

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

Explizite Schnittstellenimplementierungen

Name Beschreibung
IDisposable.Dispose()

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

Gibt die nicht verwalteten Ressourcen frei, die von den SymmetricAlgorithm verwalteten Ressourcen verwendet werden, und gibt optional die verwalteten Ressourcen frei.

Gilt für:

Weitere Informationen