Cryptographie en C# (.NET) : chiffrement et hachage
La sécurité des données est l'un des aspects clés du développement moderne. La plateforme .NET offre un ensemble d'outils puissant et flexible pour la protection cryptographique des informations dans l'espace de noms System.Security.Cryptography. Dans cet article, nous examinerons les principales fonctionnalités de la cryptographie en C# (.NET) : le chiffrement symétrique et asymétrique, le hachage de mots de passe et la création de signatures numériques.
1. Chiffrement symétrique (AES)
Le chiffrement symétrique utilise la même clé pour chiffrer et déchiffrer les données. L'algorithme le plus courant est AES (Advanced Encryption Standard). Dans .NET, il est implémenté par la classe Aes.
Exemple de chiffrement et déchiffrement d'une chaîne avec AES :
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 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(); } } } } }}2. Chiffrement asymétrique (RSA)
Le chiffrement asymétrique utilise une paire de clés : une clé publique (public key) pour le chiffrement et une clé privée (private key) pour le déchiffrement. Dans .NET, ce mécanisme est implémenté par la classe RSA. RSA est souvent utilisé pour la transmission sécurisée de clés symétriques.
Exemple de génération de clés et de chiffrement avec RSA :
using System;using System.Security.Cryptography;using System.Text;
public class RsaExample{ public static void RsaEncryptDecrypt() { using (RSA rsa = RSA.Create()) { // Génération des clés (2048 bits) RSAParameters publicKey = rsa.ExportParameters(false); // uniquement la clé publique RSAParameters privateKey = rsa.ExportParameters(true); // les deux clés
string original = "Message secret pour RSA";
// Chiffrement avec la clé publique byte[] encryptedData = rsa.Encrypt(Encoding.UTF8.GetBytes(original), RSAEncryptionPadding.OaepSHA256);
// Déchiffrement avec la clé privée byte[] decryptedData = rsa.Decrypt(encryptedData, RSAEncryptionPadding.OaepSHA256); string decrypted = Encoding.UTF8.GetString(decryptedData);
Console.WriteLine($"Original : {original}"); Console.WriteLine($"Déchiffré : {decrypted}"); } }}3. Hachage de données (SHA-256, MD5)
Le hachage
Aussi dans la bibliothèque
Authentification et autorisation en C++ : bibliothèques et exemples pratiques
Client OAuth pour Kotlin : bibliothèque Ktor OAuth pour l'authentification dans les API
ORM pour Rust : comparaison et exemples Diesel, SeaORM, SQLx