ExamCryptoJanvier/crypto/AES_CRYPTO.cs

104 lines
3.5 KiB
C#

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);
}
}
}