Mappage de noms d'algorithmes à des classes de chiffrement
Remarque
Cet article est spécifique au .NET Framework. Cela 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 avec le SDK Windows :
Créer un objet avec l’opérateur new
Créer un objet qui implémente un algorithme de chiffrement particulier en appelant la méthode Create sur la classe abstraite pour cet algorithme
Créer un objet qui implémente un algorithme de chiffrement particulier en appelant la méthode CryptoConfig.CreateFromName
Créer un objet qui implémente une classe d’algorithmes de chiffrement (comme un chiffrement par blocs 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 de noms System.Security.Cryptography 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 (telle que SHA1Managed) en appelant l’opérateur new. Toutefois, s’il n’est pas important que le CLR charge une classe plutôt qu’une autre, dans la mesure où 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 soit utilisé un algorithme de hachage plutôt qu’un autre, le développeur peut appeler la méthode HashAlgorithm.Create, qui retourne un objet qui implémente une transformation de hachage.
Mappage des noms d’algorithmes dans les fichiers config
Par défaut, le runtime retourne un objet SHA1CryptoServiceProvider pour les quatre scénarios. Toutefois, un administrateur d’ordinateur peut changer 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 config 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 objet MySHA1HashClass
.
<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 que le common language runtime utilise pour rechercher la classe. Vous pouvez utiliser n’importe quelle chaîne qui répond aux exigences spécifiées dans 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 dans l’espace de noms System.Security.Cryptography. La valeur de l’attribut class est le nom de l’attribut dans l’élément <cryptoClass>.
Notes
Vous pouvez obtenir un algorithme SHA1 en appelant la méthode SHA1.Create ou 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 config.
Pour obtenir la liste des noms par défaut et les classes auxquels ils correspondent, consultez CryptoConfig.