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[] Aussi dans la bibliothèque
Juniper : Une bibliothèque GraphQL élégante en Rust pour les applications web modernes
MetricsKit — surveillance des applications Swift sur iOS/macOS
Client OAuth pour Go (Golang) : Connexion aux fournisseurs OAuth 2.0
Générateur de QR codes en JavaScript (Node.js) avec qrcode et qr-image
Travailler avec les archives ZIP en Swift (iOS/macOS) : guide complet