Mappa algoritmnamn till kryptografiklasser

Anmärkning

Den här artikeln är specifik för .NET Framework. Det gäller inte för nyare implementeringar av .NET, inklusive .NET 6 och senare versioner.

Det finns fyra sätt för en utvecklare att skapa ett kryptografiobjekt med hjälp av Windows SDK:

  • Skapa ett objekt med hjälp av operatorn new .

  • Skapa ett objekt som implementerar en viss kryptografialgoritm genom att anropa Create metoden för den abstrakta klassen för den algoritmen.

  • Skapa ett objekt som implementerar en viss kryptografialgoritm genom att anropa CryptoConfig.CreateFromName metoden.

  • Skapa ett objekt som implementerar en klass med kryptografiska algoritmer (till exempel ett symmetriskt block chiffer) genom att anropa Create metoden för den abstrakta klassen för den typen av algoritm (till exempel SymmetricAlgorithm).

Anta till exempel att en utvecklare vill beräkna SHA1-hashen för en uppsättning byte. Namnområdet System.Security.Cryptography innehåller två implementeringar av SHA1-algoritmen, en rent hanterad implementering och en som omsluter CryptoAPI. Utvecklaren kan välja att instansiera en viss SHA1-implementering (till exempel SHA1Managed) genom att anropa operatorn new . Men om det inte spelar någon roll vilken klass den gemensamma språkkörningen läser in så länge klassen implementerar SHA1-hashalgoritmen kan utvecklaren skapa ett objekt genom att anropa SHA1.Create metoden. Den här metoden anropar System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), som måste returnera en implementering av SHA1-hashalgoritmen.

Utvecklaren kan också anropa System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") eftersom kryptografikonfigurationen som standard innehåller korta namn för algoritmerna som levereras i .NET Framework.

Om det inte spelar någon roll vilken hash-algoritm som används kan utvecklaren HashAlgorithm.Create anropa metoden, som returnerar ett objekt som implementerar en hash-transformering.

Mappa algoritmnamn i konfigurationsfiler

Normalt returnerar runtime-miljön ett SHA1CryptoServiceProvider objekt för alla fyra scenarierna. En datoradministratör kan dock ändra vilken typ av objekt som metoderna i de två senaste scenarierna returnerar. För att göra detta måste du mappa ett eget algoritmnamn till den klass som du vill använda i datorkonfigurationsfilen (Machine.config).

I följande exempel visas hur du konfigurerar körningen så att System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") och System.Security.Cryptography.HashAlgorithm.Create returnerar ett MySHA1HashClass objekt.

<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>

Du kan ange namnet på attributet i elementet<cryptoClass> (i föregående exempel namnges attributet MySHA1Hash). Värdet för attributet i -elementet <cryptoClass> är en sträng som den vanliga språkkörningen använder för att hitta klassen. Du kan använda valfri sträng som uppfyller kraven som anges i Ange fullständigt kvalificerade typnamn.

Många algoritmnamn kan mappas till samma klass. Elementet<nameEntry> mappar en klass till ett eget algoritmnamn. Attributet name kan vara antingen en sträng som används när du anropar metoden System.Security.Cryptography.CryptoConfig.CreateFromName eller namnet på en abstrakt kryptografiklass i System.Security.Cryptography namnområdet. Värdet för class attributet är namnet på attributet i elementet <cryptoClass> .

Anmärkning

Du kan hämta en SHA1-algoritm genom att anropa SHA1.Create metoden Security.CryptoConfig.CreateFromName("SHA1"). Varje metod garanterar endast att den returnerar ett objekt som implementerar SHA1-algoritmen. Du behöver inte mappa varje vänligt namn på en algoritm till samma klass i konfigurationsfilen.

En lista över standardnamn och de klasser som de mappas till finns i CryptoConfig.

Se även