104 lines
3.5 KiB
C#
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);
|
|
|
|
}
|
|
}
|
|
}
|