Partager via


Mappage des noms d’algorithmes aux classes de chiffrement

Remarque

Cet article est spécifique à .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.

Il existe quatre façons pour un développeur de créer un objet de chiffrement à l’aide du Kit de développement logiciel (SDK) Windows :

  • Créez un objet à l’aide de l’opérateur new .

  • Créez un objet qui implémente un algorithme de chiffrement particulier en appelant la méthode Create sur la classe abstraite pour cet algorithme.

  • Créez un objet qui implémente un algorithme de chiffrement particulier en appelant la CryptoConfig.CreateFromName méthode.

  • Créez un objet qui implémente une classe d’algorithmes de chiffrement (comme un chiffrement de bloc symétrique) en appelant la méthode Create sur la classe abstraite pour ce type d’algorithme (par exemple SymmetricAlgorithm).

Par exemple, supposons qu’un développeur souhaite calculer le hachage SHA1 d’un ensemble d’octets. L’espace System.Security.Cryptography de noms contient deux implémentations de l’algorithme SHA1, une implémentation purement managée et une implémentation qui encapsule CryptoAPI. Le développeur peut choisir d’instancier une implémentation SHA1 particulière (par exemple) SHA1Manageden appelant le nouvel opérateur. Toutefois, s’il n’importe pas quelle classe le Common Language Runtime charge tant que la classe implémente l’algorithme de hachage SHA1, le développeur peut créer un objet en appelant la méthode SHA1.Create. Cette méthode appelle System.Security.Cryptography.CryptoConfig.CreateFromName(« System.Security.Cryptography.SHA1 »), qui doit retourner une implémentation de l’algorithme de hachage SHA1.

Le développeur peut également appeler System.Security.Cryptography.CryptoConfig.CreateFromName(« SHA1 ») car, par défaut, la configuration de chiffrement inclut des noms courts pour les algorithmes fournis dans le .NET Framework.

S’il n’est pas important que l’algorithme de hachage soit utilisé, le développeur peut appeler la HashAlgorithm.Create méthode, qui retourne un objet qui implémente une transformation de hachage.

Mappage des noms d’algorithmes dans les fichiers de configuration

Par défaut, le runtime retourne un SHA1CryptoServiceProvider objet pour les quatre scénarios. Toutefois, un administrateur d’ordinateur peut modifier le type d’objet retourné par les méthodes dans les deux derniers scénarios. Pour ce faire, vous devez mapper un nom d’algorithme convivial à la classe que vous souhaitez utiliser dans le fichier de configuration de l’ordinateur (Machine.config).

L’exemple suivant montre comment configurer le runtime afin que System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName(« SHA1 ») et System.Security.Cryptography.HashAlgorithm.Create retournent un MySHA1HashClass objet.

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

Vous pouvez spécifier le nom de l’attribut dans l’élément< cryptoClass> (l’exemple précédent nomme l’attributMySHA1Hash). La valeur de l’attribut dans l’élément <cryptoClass> est une chaîne utilisée par le Common Language Runtime pour rechercher la classe. Vous pouvez utiliser n’importe quelle chaîne qui répond aux exigences spécifiées dans la spécification des noms de types complets.

De nombreux noms d’algorithmes peuvent être mappés à la même classe. L’élément< nameEntry> mappe une classe à un nom d’algorithme convivial. L'attribut name peut être une chaîne utilisée lors de l'appel de la méthode System.Security.Cryptography.CryptoConfig.CreateFromName ou le nom d'une classe de chiffrement abstraite du namespace System.Security.Cryptography. La valeur de l’attribut de classe est le nom de l’attribut dans l’élément <cryptoClass> .

Remarque

Vous pouvez obtenir un algorithme SHA1 en appelant la SHA1.Create méthode Security.CryptoConfig.CreateFromName(« SHA1 »). Chaque méthode garantit uniquement qu’elle retourne un objet qui implémente l’algorithme SHA1. Vous n’avez pas besoin de mapper chaque nom convivial d’un algorithme à la même classe dans le fichier de configuration.

Pour obtenir la liste des noms par défaut et les classes à laquelle ils sont mappés, consultez CryptoConfig.

Voir aussi