Dela via


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 den nya operatorn.

  • Skapa ett objekt som implementerar en viss kryptografialgoritm genom att anropa metoden Skapa i 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 blockkryptering) genom att anropa metoden Skapa i 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 den nya operatorn. 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 <cryptoClass-elementet> (i föregående exempel namnges attributet MySHA1Hash). Värdet för attributet i <cryptoClass-elementet> ä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. Namnattributet kan antingen vara 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 klassattributet är namnet på attributet i <cryptoClass-elementet> .

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