Zuordnen von Algorithmennamen zu kryptografischen Klassen

Hinweis

Dieser Artikel gilt für das .NET Framework. Er 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:

  • Erstellung eines Objekts mithilfe des new-Operators.

  • Erstellen eines Objekts, das einen bestimmten Kryptografiealgorithmus implementiert, indem die Create-Methode für die abstrakte Klasse für diesen Algorithmus aufgerufen wird.

  • Erstellen eines Objekts, das einen bestimmten Kryptografiealgorithmus implementiert, indem die CryptoConfig.CreateFromName-Methode aufgerufen wird.

  • Erstellen eines Objekts, das eine Klasse kryptografischer Algorithmen (z. B. eine symmetrische Blockchiffre) implementiert, indem die Create-Methode für die abstrakte Klasse für diesen Algorithmustyp (z. B. SymmetricAlgorithm) aufgerufen wird.

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, eine rein verwaltete Implementierung und eine, die CryptoAPI umschließt. Der Entwickler kann sich für die Instanziierung einer bestimmten SHA1-Implementierung entscheiden (z. B. SHA1Managed), indem er den new-Operator aufruft. Wenn es jedoch keine Rolle spielt, welche Klasse die Common Language Runtime lädt, solange die Klasse den SHA1-Hashalgorithmus implementiert, kann der Entwickler ein Objekt erstellen, indem er die SHA1.Create-Methode aufruft. 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 Algorithmen enthält, die mit dem .NET Framework ausgeliefert werden.

Wenn es keine Rolle spielt, 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 Runtime 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 der Klasse, die Sie in der Computerkonfigurationsdatei (Machine.config) verwenden möchten, den Anzeigenamen eines Algorithmus zuordnen.

Im folgenden Beispiel wird gezeigt, wie die 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 vorherigen Beispiel wird das Attribut als MySHA1Hash benannt). Der Wert des Attributs im <cryptoClass>-Element ist eine Zeichenfolge, die die Common Language Runtime verwendet, um die Klasse zu finden. Sie können eine beliebige Zeichenfolge verwenden, die die unter Angeben vollqualifizierter Typnamen angegebenen Anforderungen erfüllt.

Viele Algorithmusnamen können derselben Klasse zugeordnet werden. Das <nameEntry>-Element ordnet dem Anzeigenamen eines Algorithmus eine Klasse 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 Kryptografieklasse 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 abrufen, indem Sie die SHA1.Create- oder Security.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 die Klassen, denen sie zugeordnet werden, finden Sie unter CryptoConfig.

Weitere Informationen