Cryptographie en C# (.NET) : chiffrement et hachage de données

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 de données

Les applications modernes sur la plateforme .NET nécessitent presque toujours une protection des données. La bibliothèque System.Security.Cryptography fournit un ensemble complet d'outils pour réaliser des opérations cryptographiques : du chiffrement symétrique et asymétrique au hachage et à la génération de signatures numériques. Dans cet article, nous examinerons les principaux algorithmes disponibles en C# et montrerons des exemples de leur utilisation.



1. Classes principales de cryptographie dans .NET

Toutes les classes cryptographiques se trouvent dans l'espace de noms System.Security.Cryptography. Les catégories principales :

  • Chiffrement symétrique — une seule clé pour le chiffrement et le déchiffrement (Aes, DES, TripleDES).
  • Chiffrement asymétrique — une paire de clés : publique et privée (RSA, ECDiffieHellman).
  • Hachage — transformation unidirectionnelle des données (SHA256, SHA512, MD5).
  • Génération de nombres aléatoires — générateur cryptographiquement sûr (RandomNumberGenerator).


2. Chiffrement symétrique avec l'exemple AES

L'algorithme AES (Advanced Encryption Standard) est le chiffrement symétrique le plus répandu. Pour l'utiliser dans .NET, on emploie la classe Aes.

Exemple de chiffrement et déchiffrement d'une chaîne :

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

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

ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.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 aesAlg = Aes.Create()) { aesAlg.Key = key; aesAlg.IV = iv;

ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.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(); } } } } }}

Utilisation :

byte[] key = RandomNumberGenerator.GetBytes(32); // clé 256 bitsbyte[] iv = RandomNumberGenerator.GetBytes(16);  // IV 128 bits

string original = "Données secrètes";byte[] encrypted = AesExample.EncryptStringToBytes_Aes(original, key, iv);string decrypted = AesExample.DecryptStringFromBytes_Aes(encrypted, key, iv);

Console.WriteLine($"Original : {original}");Console.WriteLine($"Déchiffré : {decrypted}");


3. Chiffrement asymétrique avec RSA

RSA est utilisé pour la transmission sécurisée de clés ou de petits volumes de données. Dans .NET, il est implémenté par la classe RSA.

Exemple de génération de clés et de chiffrement :

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

public class RsaExample{ public static void Demonstrate

Recommendations