using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace crypto { class AES_CRYPTO { private static readonly byte[] SALT = new byte[] { 0x26, 0xdc, 0xff, 0x00, 0xad, 0xed, 0x7a, 0xee, 0xc5, 0xfe, 0x07, 0xaf, 0x4d, 0x08, 0x22, 0x3c }; public AES_CRYPTO() { } public string Crypt(string text, string key) { return EncryptString(text, key, ""); } public string decryptage(string text, string key) { return DecryptString(text, key, ""); } private static string EncryptString(string clearText, string strKey, string strIv) { // Place le texte à chiffrer dans un tableau d'octets byte[] plainText = Encoding.UTF8.GetBytes(clearText); // Place la clé de chiffrement dans un tableau d'octets byte[] key = Encoding.UTF8.GetBytes(strKey); // Place le vecteur d'initialisation dans un tableau d'octets byte[] iv = Encoding.UTF8.GetBytes(strIv); RijndaelManaged rijndael = new RijndaelManaged(); MD5 md5 = MD5.Create(); // Définit le mode utilisé rijndael.Mode = CipherMode.CBC; rijndael.Key = md5.ComputeHash(key); rijndael.IV = md5.ComputeHash(key); // Crée le chiffreur AES - Rijndael ICryptoTransform aesEncryptor = rijndael.CreateEncryptor(); MemoryStream ms = new MemoryStream(); // Ecris les données chiffrées dans le MemoryStream CryptoStream cs = new CryptoStream(ms, aesEncryptor, CryptoStreamMode.Write); cs.Write(plainText, 0, plainText.Length); cs.FlushFinalBlock(); // Place les données chiffrées dans un tableau d'octet byte[] CipherBytes = ms.ToArray(); ms.Close(); cs.Close(); // Place les données chiffrées dans une chaine encodée en Base64 return Convert.ToBase64String(CipherBytes); } public static string DecryptString(string cipherText, string strKey, string strIv) { // Place le texte à déchiffrer dans un tableau d'octets byte[] cipheredData = Convert.FromBase64String(cipherText); // Place la clé de déchiffrement dans un tableau d'octets byte[] key = Encoding.UTF8.GetBytes(strKey); // Place le vecteur d'initialisation dans un tableau d'octets byte[] iv = Encoding.UTF8.GetBytes(strIv); MD5 md5 = MD5.Create(); RijndaelManaged rijndael = new RijndaelManaged(); rijndael.Key = md5.ComputeHash(key); rijndael.IV = md5.ComputeHash(key); // Ecris les données déchiffrées dans le MemoryStream ICryptoTransform decryptor = rijndael.CreateDecryptor(); MemoryStream ms = new MemoryStream(cipheredData); CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read); // Place les données déchiffrées dans un tableau d'octet byte[] plainTextData = new byte[cipheredData.Length]; int decryptedByteCount = cs.Read(plainTextData, 0, plainTextData.Length); ms.Close(); cs.Close(); return Encoding.UTF8.GetString(plainTextData, 0, decryptedByteCount); } } }