Freigeben über


SymmetricAlgorithm-Klasse

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

Namespace: System.Security.Cryptography
Assembly: mscorlib (in mscorlib.dll)

Syntax

'Declaration
<ComVisibleAttribute(True)> _
Public MustInherit Class SymmetricAlgorithm
    Implements IDisposable
'Usage
Dim instance As SymmetricAlgorithm
[ComVisibleAttribute(true)] 
public abstract class SymmetricAlgorithm : IDisposable
[ComVisibleAttribute(true)] 
public ref class SymmetricAlgorithm abstract : IDisposable
/** @attribute ComVisibleAttribute(true) */ 
public abstract class SymmetricAlgorithm implements IDisposable
ComVisibleAttribute(true) 
public abstract class SymmetricAlgorithm implements IDisposable

Hinweise

Die Klassen, die von der SymmetricAlgorithm-Klasse abgeleitet werden, verwenden den CBC-Verkettungsmodus (Cipher Block Chaining), der für die kryptografische Datentransformation einen Schlüssel (Key) und einen Initialisierungsvektor (IV) erfordert. 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 dieselben Werte festlegen, die für die Verschlüsselung verwendet wurden. Wenn ein symmetrischer Algorithmus sinnvoll verwendet werden soll, dürfen nur der Absender und der Empfänger den geheimen Schlüssel kennen.

Bei RijndaelManaged, DESCryptoServiceProvider, RC2CryptoServiceProvider und TripleDESCryptoServiceProvider handelt es sich um Implementierungen symmetrischer Algorithmen.

Beachten Sie, dass es bei der Verwendung abgeleiteter Klassen vom Standpunkt der Datensicherheit nicht ausreichend ist, einfach eine Garbage Collection zu erzwingen, nachdem Sie das Objekt verwendet haben. Sie müssen die Clear-Methode für das Objekt explizit aufrufen, um alle sensiblen Daten innerhalb des Objekts vor der Freigabe mit 0 (null) zu füllen. Beachten Sie, dass bei der Garbage Collection nicht der Inhalt der aufgelisteten Objekte mit 0 (null) gefüllt, sondern nur der Speicher so kennzeichnet wird, dass er zur erneuten Reservierung zur Verfügung steht. Daher sind die Daten in einem Objekt, das an den Garbage Collector übergeben wurde, möglicherweise noch im Heap im nicht reservierten Speicher vorhanden. Bei Kryptografieobjekten können diese Daten sensible Informationen enthalten, z. B. Schlüsseldaten oder einen Klartextblock.

Alle kryptografischen Klassen in .NET Framework, die vertrauliche Daten enthalten, implementieren eine Clear-Methode. Bei einem Aufruf überschreibt die Clear-Methode alle vertraulichen Daten innerhalb des Objekts mit 0 (null) und gibt das Objekt anschließend frei, sodass es der Garbage Collection sicher unterzogen werden kann. Nachdem das Objekt mit 0 (null) aufgefüllt und freigegeben wurde, müssen Sie die Dispose-Methode mit dem auf True festgelegten disposing-Parameter aufrufen, um alle dem Objekt zugeordneten verwalteten und nicht verwalteten Ressourcen freizugeben.

Hinweise für Erben Wenn Sie von der SymmetricAlgorithm-Klasse erben, müssen Sie die folgenden Member überschreiben: CreateDecryptor, CreateEncryptor, GenerateIV und GenerateKey.

Beispiel

Im folgenden Codebeispiel wird die RijndaelManaged-Klasse mit der angegebenen Key -Eigenschaft und dem Initialisierungsvektor (IV) verwendet, um eine durch inName angegebene Datei zu verschlüsseln, und das verschlüsselte Ergebnis wird an die durch outName angegebene Datei ausgegeben. Der desKey-Parameter und der desIV-Parameter der Methode sind 8-Byte-Arrays. Um dieses Beispiel auszuführen, müssen Sie das 128-Bit-Verschlüsselungspaket installiert haben.

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
private static void EncryptData(String inName, String outName, byte[] rijnKey, byte[] rijnIV)
 {    
     //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.
 
     SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); //Creates the default implementation, which is RijndaelManaged.         
     CryptoStream encStream = 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 = rdlen + len;
         Console.WriteLine("{0} bytes processed", rdlen);
     }
 
     encStream.Close();  
     fout.Close();
     fin.Close();                   
 }
void EncryptData( String^ inName, String^ outName, array<Byte>^rijnKey, array<Byte>^rijnIV )
{
   
   //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.

   SymmetricAlgorithm^ rijn = SymmetricAlgorithm::Create(); //Creates the default implementation, which is RijndaelManaged.         

   CryptoStream^ encStream = gcnew 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 = rdlen + len;
      Console::WriteLine( "{0} bytes processed", rdlen );
   }

   encStream->Close();
   fout->Close();
   fin->Close();
}
private static void EncryptData(String inName, String outName,
    ubyte rijnKey[], ubyte rijnIV[])
{
    //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.
    //Following is intermediate storage for the encryption.
    ubyte bin[] = new ubyte[100]; 
    //Following is the total number of bytes written.
    long rdlen = 0;
    //Following is the total length of the input file.
    long totlen = fin.get_Length(); 
    //Following is the number of bytes to be written at a time.
    int len; 

    //Create the default implementation, which is RijndaelManaged.         
    SymmetricAlgorithm rijn = SymmetricAlgorithm.Create(); 
    CryptoStream encStream = 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 = rdlen + len;
        Console.WriteLine("{0} bytes processed", (System.Int64)rdlen);
    }
    encStream.Close();
    fout.Close();
    fin.Close();
} //EncryptData

Vererbungshierarchie

System.Object
  System.Security.Cryptography.SymmetricAlgorithm
     System.Security.Cryptography.DES
     System.Security.Cryptography.RC2
     System.Security.Cryptography.Rijndael
     System.Security.Cryptography.TripleDES

Threadsicherheit

Alle öffentlichen statischen (Shared in Visual Basic) Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Plattformen

Windows 98, Windows 2000 SP4, Windows CE, Windows Millennium Edition, Windows Mobile für Pocket PC, Windows Mobile für Smartphone, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0

.NET Compact Framework

Unterstützt in: 2.0

Siehe auch

Referenz

SymmetricAlgorithm-Member
System.Security.Cryptography-Namespace

Weitere Ressourcen

Kryptografische Dienste