Freigeben über


Zuordnen von Algorithmusnamen zu Kryptografieklassen

Hinweis

Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.

Es gibt vier Möglichkeiten, wie entwickler ein Kryptografieobjekt mithilfe des Windows SDK erstellen können:

  • Erstellen Sie ein Objekt mithilfe des new Operators.

  • Erstellen Sie ein Objekt, das einen bestimmten Kryptografiealgorithmus implementiert, indem Sie die Create Methode für die abstrakte Klasse für diesen Algorithmus aufrufen.

  • Erstellen Sie ein Objekt, das einen bestimmten Kryptografiealgorithmus implementiert, indem Sie die CryptoConfig.CreateFromName Methode aufrufen.

  • Erstellen Sie ein Objekt, das eine Klasse kryptografischer Algorithmen (z. B. eine symmetrische Blockchiffre) implementiert, indem Sie die Methode der abstrakten Klasse für diesen Algorithmustyp (z. B. SymmetricAlgorithm) aufrufen.

Angenommen, ein Entwickler möchte den SHA1-Hash einer Gruppe von Bytes berechnen. Der System.Security.Cryptography Namespace enthält zwei Implementierungen des SHA1-Algorithmus, einer rein verwalteten Implementierung und einer, die CryptoAPI umschließt. Der Entwickler kann eine bestimmte SHA1-Implementierung (z. B. die SHA1Managed) instanziieren, indem er den new Operator aufruft. Wenn es jedoch egal ist, welche Klasse die Common Language Runtime lädt, solange die Klasse den SHA1-Hashalgorithmus implementiert, kann der Entwickler ein Objekt durch Aufrufen der SHA1.Create Methode erstellen. Diese Methode ruft System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1") auf, die eine Implementierung des SHA1-Hashalgorithmus zurückgeben muss.

Der Entwickler kann auch System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") aufrufen, da die Kryptografiekonfiguration standardmäßig kurze Namen für die in .NET Framework ausgelieferten Algorithmen enthält.

Wenn es egal ist, welcher Hashalgorithmus verwendet wird, kann der Entwickler die HashAlgorithm.Create Methode aufrufen, die ein Objekt zurückgibt, das eine Hashingtransformation implementiert.

Zuordnen von Algorithmusnamen in Konfigurationsdateien

Standardmäßig gibt die Laufzeit ein SHA1CryptoServiceProvider Objekt für alle vier Szenarien zurück. Ein Computeradministrator kann jedoch den Objekttyp ändern, den die Methoden in den letzten beiden Szenarien zurückgeben. Dazu müssen Sie einen freundlichen Algorithmusnamen der Klasse zuordnen, die Sie in der Maschinenkonfigurationsdatei verwenden möchten (Machine.config).

Das folgende Beispiel zeigt, wie die Laufzeit 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 vorherigen Beispiel wird das Attribut MySHA1Hashbenannt). Der Wert des Attributs im <cryptoClass> Element ist eine Zeichenfolge, die von der Common Language Runtime zum Suchen der Klasse verwendet wird. Sie können eine beliebige Zeichenfolge verwenden, die die in der Angabe vollqualifizierter Typnamen angegebenen Anforderungen erfüllt.

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

Hinweis

Sie können einen SHA1-Algorithmus abrufen, indem Sie die SHA1.CreateSecurity.CryptoConfig.CreateFromName("SHA1")- Methode aufrufen. Jede Methode garantiert nur, dass sie ein Objekt zurückgibt, das den SHA1-Algorithmus implementiert. Sie müssen nicht jeden Anzeigenamen eines Algorithmus derselben Klasse in der Konfigurationsdatei zuordnen.

Eine Liste der Standardnamen und der Klassen, denen sie zugeordnet sind, finden Sie unter CryptoConfig.

Siehe auch