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 -Klasse mit der angegebenen Eigenschaft und dem initialisierungsvektor ( ) verwendet, um eine durch angegebene Datei zu verschlüsseln, und gibt das verschlüsselte Ergebnis in die durch angegebene Aes Key Datei IV inName outName aus. Die desKey Parameter und für die desIV -Methode sind 8-Byte-Arrays. Sie müssen das Paket mit hoher Verschlüsselung installiert haben, um dieses Beispiel ausführen zu können.

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 klassen, die von der -Klasse ableiten, verwenden einen Verkettungsmodus namens Cipher Block Chaining (CBC), der einen Schlüssel ( ) und einen SymmetricAlgorithm Initialisierungsvektor ( ) erfordert, um kryptografische Transformationen für Daten Key IV durchzuführen. Um Daten zu entschlüsseln, die mit einer der -Klassen verschlüsselt wurden, müssen Sie die -Eigenschaft und die -Eigenschaft auf die gleichen Werte festlegen, die SymmetricAlgorithm für die Verschlüsselung verwendet Key IV wurden. Damit ein symmetrischer Algorithmus nützlich ist, muss der geheime Schlüssel nur dem Absender und dem Empfänger bekannt sein.

Aes, DES RC2 , und sind TripleDES Implementierungen symmetrischer Algorithmen.

Beachten Sie, dass es aus Sicherheitssicht nicht ausreicht, eine Garbage Collection zu erzwingen, wenn Sie abgeleitete Klassen verwenden, nachdem Sie das -Objekt verwendet haben. Sie müssen die -Methode für das -Objekt explizit aufrufen, um alle vertraulichen Daten innerhalb des Objekts zu 0 (null) zu verdringen, Clear bevor sie freigegeben werden. Beachten Sie, dass die Garbage Collection den Inhalt der gesammelten Objekte nicht auf null ausdrungen, sondern den Arbeitsspeicher einfach als für die Neuzuordnung verfügbar markiert. Daher können die in einem Garbage Collection-Objekt enthaltenen Daten weiterhin im Speicherhap im nicht zugewiesenen Speicher vorhanden sein. 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 besitzen, implementieren eine Clear -Methode. Beim Aufrufen überschreibt die -Methode alle vertraulichen Daten innerhalb des Objekts mit Nullen und gibt dann das Objekt frei, damit es sicher garbage Clear collection erstellt werden kann. Wenn das Objekt auf Null gesetzt und freigegeben wurde, sollten Sie die -Methode aufrufen, bei der der -Parameter auf festgelegt ist, um alle verwalteten und nicht verwalteten Ressourcen zu veräußern, die dem Dispose disposing True -Objekt zugeordnet sind.

Hinweise für Ausführende

Wenn Sie von der -Klasse SymmetricAlgorithm erben, müssen Sie die folgenden Member überschreiben: CreateDecryptor(Byte[], Byte[]) , , und CreateEncryptor(Byte[], Byte[]) GenerateIV() 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.

Erstellt ein Standardkryptografieobjekt zum Ausführen des symmetrischen Algorithmus.

Create(String)

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 Auf padding-Modus.

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

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

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

Entschlüsselt Daten im angegebenen Puffer unter Verwendung des CBC-Modus mit dem angegebenen Auffüllmodus.

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 unter Verwendung des CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

DecryptEcb(Byte[], PaddingMode)

Entschlüsselt Daten mit dem FÜLLMODUS mit dem angegebenen Auffüllmodus.

DecryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Entschlüsselt Daten mit dem FÜLLMODUS mit dem angegebenen Auffüllmodus.

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

Entschlüsselt Daten im angegebenen Puffer unter Verwendung des FÜLLMODUS mit dem angegebenen Auffüllmodus.

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 Auffüllmodus.

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

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

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

Verschlüsselt Daten im angegebenen Puffer unter Verwendung des CBC-Modus mit dem angegebenen Auffüllmodus.

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 unter Verwendung des CFB-Modus mit dem angegebenen Abstandsmodus und der angegebenen Feedbackgröße.

EncryptEcb(Byte[], PaddingMode)

Verschlüsselt Daten mit dem ANGEGEBENen Abstandsmodus im MODUS FÜR DIE DATENAUFFÜLLUNG.

EncryptEcb(ReadOnlySpan<Byte>, PaddingMode)

Verschlüsselt Daten mit dem ANGEGEBENen Abstandsmodus im MODUS FÜR DIE DATENAUFFÜLLUNG.

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

Verschlüsselt Daten im angegebenen Puffer mit dem ANGEGEBENen Auffüllungsmodus im MODUS "ENCRYPT".

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 Chiffretexts mit einem angegebenen Auffüllmodus und klartextlänge im CBC-Modus ab.

GetCiphertextLengthCfb(Int32, PaddingMode, Int32)

Ruft die Länge eines Chiffretexts mit einem angegebenen Auffüllmodus und klartextlänge im CFB-Modus ab.

GetCiphertextLengthEcb(Int32, PaddingMode)

Ruft die Länge eines Chiffretexts mit einem angegebenen Auffüllmodus und der Klartextlänge im ENE-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 zu entschlüsseln, indem der CBC-Modus mit dem angegebenen Auffüllmodus verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu entschlüsseln, indem der CBC-Modus mit dem angegebenen Auffüllmodus 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 im angegebenen Puffer zu entschlüsseln, indem der CFB-Modus mit dem angegebenen Auf padding-Modus und der angegebenen Feedbackgröße verwendet wird.

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

Versucht, Daten im angegebenen Puffer zu entschlüsseln, indem der MODUS MIT DEM ANGEGEBENen Paddingmodus verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu entschlüsseln, indem der MODUS MIT DEM ANGEGEBENen Auflassungsmodus verwendet wird.

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

Versucht, Daten im angegebenen Puffer zu verschlüsseln, indem der CBC-Modus mit dem angegebenen Auf padding-Modus verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu verschlüsseln, indem der CBC-Modus mit dem angegebenen Auf padding-Modus 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 Auf padding-Modus 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, indem der CFB-Modus mit dem angegebenen Auf padding-Modus und der angegebenen Feedbackgröße verwendet wird.

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

Versucht, Daten im angegebenen Puffer zu verschlüsseln, indem der MODUS MIT DEM ANGEGEBENen Paddingmodus verwendet wird.

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

Versucht beim Überschreiben in einer abgeleiteten Klasse, Daten im angegebenen Puffer zu verschlüsseln, indem der MODUS MIT DEM ANGEGEBENen Auflassungsmodus 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

Siehe auch