I'm trying to encrypt the string, but it seems to be giving an error in the json, because it's cutting 5 characters from the string.
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;
namespace Test
{
public class Test
{
public static void Run()
{
string encryptedString = "";
// Create a sample JSON object
var data = new
{
name = "Alice",
age = 30,
email = "alice@example.com"
};
// Serialize the JSON object to a byte array
var jsonBytes = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data));
// Create an AES encryption algorithm instance
using (var aes = Aes.Create())
{
// Generate a random encryption key and IV
aes.GenerateKey();
aes.GenerateIV();
// Encrypt the JSON byte array
byte[] encryptedBytes;
using (var encryptor = aes.CreateEncryptor())
using (var memoryStream = new MemoryStream())
using (var cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
{
cryptoStream.Write(jsonBytes, 0, jsonBytes.Length);
cryptoStream.FlushFinalBlock();
encryptedBytes = memoryStream.ToArray();
}
// Combine the encrypted bytes with the key and IV
byte[] combinedBytes = new byte[aes.Key.Length + aes.IV.Length + encryptedBytes.Length];
Console.WriteLine($"{combinedBytes.Length}, {aes.Key.Length} {aes.IV.Length}");
Array.Copy(aes.Key, 0, combinedBytes, 0, aes.Key.Length);
Array.Copy(aes.IV, 0, combinedBytes, aes.Key.Length, aes.IV.Length);
Array.Copy(encryptedBytes, 0, combinedBytes, aes.Key.Length + aes.IV.Length, encryptedBytes.Length);
// Convert the result to a base64-encoded string
encryptedString = Convert.ToBase64String(combinedBytes);
Console.WriteLine(encryptedString);
}
{
// Convert the base64-encoded string to a byte array
var encryptedBytes = Convert.FromBase64String(encryptedString);
// Extract the key and IV from the byte array
var key = new byte[32];
var iv = new byte[16];
Array.Copy(encryptedBytes, 0, key, 0, key.Length);
Array.Copy(encryptedBytes, key.Length, iv, 0, iv.Length);
// Create an AES encryption algorithm instance and set its key and IV
using (var aes = Aes.Create())
{
aes.Key = key;
aes.IV = iv;
// Decrypt the remaining bytes in the array
var decryptedBytes = new byte[encryptedBytes.Length - key.Length - iv.Length];
using (var decryptor = aes.CreateDecryptor())
using (var memoryStream = new MemoryStream(encryptedBytes, key.Length + iv.Length, decryptedBytes.Length))
using (var cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
cryptoStream.Read(decryptedBytes, 0, decryptedBytes.Length);
}
// Convert the decrypted byte array to a string and deserialize the JSON object
var jsonString = Encoding.UTF8.GetString(decryptedBytes);
System.Console.WriteLine(jsonString);
var json = JsonConvert.DeserializeObject(jsonString);
Console.WriteLine(json);
}
}
}
}
}
OUTPUT
1xjfMTczKpZQIsBQ8nmlxdc4K9dX/07hV1zCiiXqny43jxYMWYAjkU/lfoD5DMav6RC1bJBU9mLDrPXiI7ruMnUXn5zhPC6HebsQNDuHx+8EpKrU2bpaDjeJZ0vCTQRL7EQ1tv/b1U7refFcP2u1nw==
{"name":"Alice","age":30,"email":"alice@example.
Unhandled exception. Newtonsoft.Json.JsonReaderException: Unterminated string. Expected delimiter: ". Path 'email', line 1, position 64. at Newtonsoft.Json.JsonTextReader.ReadStringIntoBuffer(Char quote) at Newtonsoft.Json.JsonTextReader.ParseValue() at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateJObject(JsonReader reader) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader, Type objectType) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) at Newtonsoft.Json.JsonConvert.DeserializeObject(String value) at Test.Test.Run() in /home/user/Documentos/C#/project/Test.cs:line 81 at Project.Program.Main(String[] args) in /home/user/Documentos/C#/project/Program.cs:line 14