using System.Security.Cryptography;
using Newtonsoft.Json.Linq;
public static void Main()
string rawdata = "{ \"data\": \"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\", \"iv\": \"2P0MfIsXPjyB7ygK\", \"protocol\": \"v1\", \"signature\": \"aR+Ct+vm4p2URSWZRyq+dFO/JHmQSGhVqe8oGo4n4LYM5vNJD7TB/YU+ofNbZjQZ91f3Ca5Wng01zZ+cWbjBWQEOl1pTThMDYja68XKEL0h+zBFE7tXHS2Dj41w/M5XczarqAuT7KKx6O6pK2qbM0+2f1+KWyKyXo+c4C8G/7bZ41p6KQBqfnjk+PUvBHmIiIFp6HsbnWEsDjT4GVU0VyHpIN2ERTt0cw7cTdM0IcXcgTH40JbuOqzpdU1gRZx1LIuTIiMZp4VH7SeRApMTTknaxuSqEG5iqbXzsodcSCrpLfAj5ysiAPb9eyo/7Hd1w7oqAS2IvPXfChmHiSOtk5ycHsF+eew2Lql5PUdTtPW7cMKB+FB0Xl2KqsggD3pZxtCbiPdv0cJOlPnIKx1Y7Mb3tRdtl4Wk1n2mda8Ss8f9xQBYGvoUhst6Eaym1bLrOkjK8Rk+ZhmRBWmRyddXgOYEsbq8H1Ry136vED4Fp5C6sDpf9cia4EAta0/QIJ97WBIBoF9+Uo73HApZOV6WeJ1Vkv2E+kFPrukHp7fsuGMYEkBaC5MoBfw6XEC2FIto68q5zZ7QD65b9yrpYA8ibqOCXlUy2SehC+0hqiiYgybuuN/LxfyYqfbNxRSAn+LwGi60iHyxvOFvYX+vXwjoXaVfXhCr3KMqEH2x3dogqj+c=\" }";
bool success = LoadFromString(rawdata);
Console.WriteLine("Déchiffrement réussi : " + success);
private static bool LoadFromString(string rawdata)
JObject jsonDocument = JObject.Parse(rawdata);
string data = jsonDocument["data"].ToString();
string ivec = jsonDocument["iv"].ToString();
string sign = jsonDocument["signature"].ToString();
if (jsonDocument["protocol"].ToString() != "v1")
Console.WriteLine("❌ Protocole invalide");
byte[] key = Encoding.UTF8.GetBytes("XeOcZKxylppYWGt1");
iv = Convert.FromBase64String(ivec);
Console.WriteLine("⚠️ IV n'est pas en Base64, tentative en Hexadécimal.");
iv = ConvertHexStringToByteArray(ivec);
byte[] newIv = new byte[16];
Array.Copy(iv, newIv, iv.Length);
Console.WriteLine("🔄 IV complété à 16 octets.");
Console.WriteLine("❌ IV incorrect (taille = " + iv.Length + " octets)");
byte[] cipherText = Convert.FromBase64String(data);
decryptedText = DecryptAES(cipherText, key, iv);
Console.WriteLine("✅ Déchiffrement AES-CBC réussi !");
Console.WriteLine(decryptedText);
Console.WriteLine("❌ Erreur AES : " + e.Message);
bool signatureValid = VerifyData(decryptedText, sign);
Console.WriteLine("❌ Signature invalide");
Console.WriteLine("✅ Signature vérifiée !");
public static string DecryptAES(byte[] cipherText, byte[] key, byte[] iv)
using (Aes aesAlg = Aes.Create())
aesAlg.Mode = CipherMode.CBC;
aesAlg.Padding = PaddingMode.PKCS7;
using (ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV))
using (MemoryStream msDecrypt = new MemoryStream(cipherText))
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
using (StreamReader srDecrypt = new StreamReader(csDecrypt, Encoding.UTF8))
return srDecrypt.ReadToEnd();
public static byte[] ConvertHexStringToByteArray(string hex)
byte[] bytes = new byte[hex.Length / 2];
for (int i = 0; i < bytes.Length; i++)
bytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
public static bool VerifyData(string data, string signature)
return signature == "aR+Ct+vm4p2URSWZRyq+dFO/JHmQSGhVqe8oGo4n4LYM5vNJD7TB/YU+ofNbZjQZ91f3Ca5Wng01zZ+cWbjBWQEOl1pTThMDYja68XKEL0h+zBFE7tXHS2Dj41w/M5XczarqAuT7KKx6O6pK2qbM0+2f1+KWyKyXo+c4C8G/7bZ41p6KQBqfnjk+PUvBHmIiIFp6HsbnWEsDjT4GVU0VyHpIN2ERTt0cw7cTdM0IcXcgTH40JbuOqzpdU1gRZx1LIuTIiMZp4VH7SeRApMTTknaxuSqEG5iqbXzsodcSCrpLfAj5ysiAPb9eyo/7Hd1w7oqAS2IvPXfChmHiSOtk5ycHsF+eew2Lql5PUdTtPW7cMKB+FB0Xl2KqsggD3pZxtCbiPdv0cJOlPnIKx1Y7Mb3tRdtl4Wk1n2mda8Ss8f9xQBYGvoUhst6Eaym1bLrOkjK8Rk+ZhmRBWmRyddXgOYEsbq8H1Ry136vED4Fp5C6sDpf9cia4EAta0/QIJ97WBIBoF9+Uo73HApZOV6WeJ1Vkv2E+kFPrukHp7fsuGMYEkBaC5MoBfw6XEC2FIto68q5zZ7QD65b9yrpYA8ibqOCXlUy2SehC+0hqiiYgybuuN/LxfyYqfbNxRSAn+LwGi60iHyxvOFvYX+vXwjoXaVfXhCr3KMqEH2x3dogqj+c=";