Share via


Zuordnen von Algorithmennamen zu kryptografischen Klassen

Aktualisiert: November 2007

Mit Windows Software Development Kit (SDK) können Entwickler kryptografische Objekte auf vier Arten erstellen:

  • Erstellen eines Objekts durch Verwenden des new-Operators.

  • Erstellen eines Objekts, das einen bestimmten kryptografischen Algorithmus implementiert, durch Aufrufen der Create-Methode in der abstrakten Klasse dieses Algorithmus.

  • Erstellen eines Objekts, das einen bestimmten kryptografischen Algorithmus implementiert, durch Aufrufen der System.Security.Cryptography.CryptoConfig.CreateFromName-Methode.

  • Erstellen eines Objekts, das eine Klasse kryptografischer Algorithmen implementiert (z. B. symmetrische Blockverschlüsselung) durch Aufrufen der Create-Methode in der abstrakten Klasse dieses Algorithmustyps (z. B. SymmetricAlgorithm).

Angenommen, ein Entwickler möchte den SHA1-Hash eines Bytesatzes berechnen. Der System.Security.Cryptography-Namespace enthält zwei Implementierungen des SHA1-Algorithmus, eine rein verwaltete Implementierung und eine, die CryptoAPI umfasst. Der Entwickler kann durch Aufrufen des new-Operators eine bestimmte SHA1-Implementierung instanziieren (z. B. die SHA1Managed-Klasse). Es spielt jedoch keine Rolle, welche Klasse die Common Language Runtime lädt. Solange die Klasse den SHA1-Hashalgorithmus implementiert, kann ein Objekt durch Aufrufen der System.Security.Cryptography.SHA1.Create-Methode erstellt werden. Diese Methode ruft System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1") auf, wodurch eine Implementierung des SHA1-Hashalgorithmus zurückgegeben werden muss.

Der Entwickler kann auch System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") aufrufen, weil Kryptografiekonfigurationssysteme standardmäßig Kurznamen für die in .NET Framework mitgelieferten Algorithmen enthalten.

Wenn es nicht darauf ankommt, welcher Hashalgorithmus verwendet wird, kann durch Aufruf der System.Security.Cryptography.HashAlgorithm.Create-Methode ein Objekt zurückgegeben werden, das eine Hashtransformation implementiert.

Zuordnen von Algorithmusnamen zu Konfigurationsdateien

Standardmäßig gibt die Common Language Runtime ein System.Security.Cryptography.SHA1CryptoServiceProvider-Klassenobjekt für alle vier Szenarien zurück. Ein Administrator kann jedoch den Objekttyp ändern, den die Methoden in den beiden letzten Szenarien zurückgeben. Dazu muss ein angezeigter Algorithmusname der Klasse zugeordnet werden, die Sie in der Konfigurationsdatei des Computers (Machine.config) verwenden möchten.

Im folgenden Beispiel wird dargestellt, wie die Common Language Runtime so konfiguriert wird, dass System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") und System.Security.Cryptography.HashAlgorithm.Create ein MySHA1HashClass-Objekt zurückgeben.

<configuration>
   <!-- Other configuration settings. -->
   <mscorlib>
      <cryptographySettings>
         <cryptoNameMapping>
            <cryptoClasses>
               <cryptoClass MySHA1Hash="MySHA1HashClass, MyAssembly
                  Culture='en', PublicKeyToken=a5d015c7d5a0b012,
                  Version=1.0.0.0"/>
            </cryptoClasses>
            <nameEntry name="SHA1" class="MySHA1Hash"/>
            <nameEntry name="System.Security.Cryptography.SHA1"
                       class="MySHA1Hash"/>
            <nameEntry name="System.Security.Cryptography.HashAlgorithm"
                       class="MySHA1Hash"/>
         </cryptoNameMapping>
      </cryptographySettings>
   </mscorlib>
</configuration>

Sie können den Namen des Attributs im <cryptoClass>-Element angeben (im vorigen Beispiel heißt das Attribut MySHA1Hash). Der Wert des Attributs im <cryptoClass>-Element ist eine Zeichenfolge, die von der Common Language Runtime verwendet wird, um die Klasse zu finden. Sie können jede Zeichenfolge verwenden, die die unter Angeben vollständig gekennzeichneter Typnamen aufgeführten Anforderungen erfüllt.

Viele Algorithmusnamen können der gleichen Klasse zugeordnet sein. Das <nameEntry>-Element ordnet eine Klasse einem angezeigten Algorithmusnamen zu. Das name-Attribut kann entweder eine Zeichenfolge sein, die beim Aufrufen der System.Security.Cryptography.CryptoConfig.CreateFromName-Methode verwendet wird, oder der Name einer abstrakten kryptografischen Klasse im System.Security.Cryptography-Namespace. Der Wert des class-Attributs ist der Name des Attributs im <cryptoClass>-Element.

Hinweis:

Sie können einen SHA1-Algorithmus durch Aufruf der System.Security.Cryptography.SHA1.Create-Methode oder der Security.CryptoConfig.CreateFromName("SHA1")-Methode erhalten. Durch jede dieser Methoden wird lediglich gewährleistet, dass ein Objekt zurückgegeben wird, das den SHA1-Algorithmus implementiert. Es ist nicht erforderlich, jeden angezeigten Algorithmusnamen derselben Klasse in der Konfigurationsdatei zuzuordnen.

Eine Liste mit Standardnamen und den zugeordneten Klassen finden Sie unter der CryptoConfig-Klasse.

Siehe auch

Weitere Ressourcen

Kryptografische Dienste

Konfigurieren kryptografischer Klassen