Cryptographie en C# (.NET) : chiffrement et hachage

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Cryptographie en C# (.NET) : chiffrement et hachage



La sécurité des données est l'une des tâches clés du développement moderne. La plateforme .NET offre un ensemble d'outils puissant et flexible pour la protection cryptographique dans l'espace de noms System.Security.Cryptography. Dans cet article, nous allons détailler les principales fonctionnalités de la cryptographie en C# : le chiffrement symétrique et asymétrique, ainsi que le hachage des données. Ce contenu sera utile aussi bien aux développeurs débutants qu'aux développeurs expérimentés souhaitant systématiser leurs connaissances.



1. Espaces de noms et classes principaux



Toute la fonctionnalité cryptographique est regroupée dans l'assembly System.Security.Cryptography. Les classes clés :

  • Aes, DES, TripleDES — algorithmes symétriques ;
  • RSA, ECDsa, ECDiffieHellman — algorithmes asymétriques ;
  • SHA256, SHA512, MD5 — algorithmes de hachage ;
  • RandomNumberGenerator — générateur de nombres aléatoires cryptographiquement sûr.


Important : utilisez uniquement des algorithmes modernes. MD5 et SHA1 sont considérés comme obsolètes et non sécurisés à des fins cryptographiques.



2. Chiffrement symétrique (AES)



Le chiffrement symétrique utilise la même clé pour le chiffrement et le déchiffrement. L'algorithme le plus populaire est AES (Advanced Encryption Standard). Voici un exemple de chiffrement d'une chaîne.



using System;using System.IO;using System.Security.Cryptography;using System.Text;

public class AesEncryption{ public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] key, byte[] iv) { using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv;

ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);

using (MemoryStream msEncrypt = new MemoryStream()) { using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write)) { using (StreamWriter swEncrypt = new StreamWriter(csEncrypt)) { swEncrypt.Write(plainText); } return msEncrypt.ToArray(); } } } }

public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] key, byte[] iv) { using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv;

ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);

using (MemoryStream msDecrypt = new MemoryStream(cipherText)) { using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read)) { using (StreamReader srDecrypt = new StreamReader(csDecrypt)) { return srDecrypt.ReadToEnd(); } } } } }}


Pour générer une clé et un vecteur d'initialisation (IV) sécurisés, utilisez RandomNumberGenerator :



using System.Security.Cryptography;

byte[] key = new byte[32]; // 256 bitsbyte[] iv = new byte[16]; // 128 bitsusing (RandomNumberGenerator rng = RandomNumberGenerator.Create()){ rng.GetBytes(key); rng.GetBytes(iv);}


3. Chiffrement asymétrique (RSA)



Le chiffrement asymétrique utilise une paire de clés : une clé publique et une clé privée. RSA est un algorithme classique, adapté au chiffrement de petites quantités de données (généralement jusqu'à 190 octets pour une clé de 2048 bits). Exemple :



using System;using System.Security.Cryptography;using System.Text;

public class RsaEncryption{ public static (byte[]

Recommendations