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 Aussi dans la bibliothèque
Journalisation pour Swift : bibliothèque SwiftyBeaver
Génération de PDF en Swift (iOS/macOS) : UIGraphicsPDFRenderer, PDFKit et Core Graphics
Internationalisation (i18n) en Swift pour iOS et macOS
Mapster C# (.NET) : guide complet avec exemples
Hibernate ORM : Un outil puissant pour travailler avec les bases de données en Java