Skip to content

NZSmartie/Newtonsoft.Json.Encryption

 
 

Repository files navigation

Newtonsoft.Json.Encryption

Decorating properties

public class ClassToSerialize
{
    [Encrypt]
    public string Property { get; set; }
}

Supported property types

  • string
  • byte[]
  • IDictionary<T, string>
  • IDictionary<T, byte[]>
  • IEnumerable<string>
  • IEnumerable<byte[]>

Note that only the values in a IDictionary are encrypted.

Usage

// per system (periodically rotated)
var key = Encoding.UTF8.GetBytes("gdDbqRpqdRbTs3mhdZh9qCaDaxJXl+e6");

// per app domain
using (var factory = new EncryptionFactory())
{
    var serializer = new JsonSerializer
    {
        ContractResolver = factory.GetContractResolver()
    };

    // transferred as meta data with the serialized payload
    byte[] initVector;

    string serialized;

    // per serialize session
    using (var algorithm = new RijndaelManaged
    {
        Key = key
    })
    {
        initVector = algorithm.IV;
        using (factory.GetEncryptSession(algorithm))
        {
            var instance = new ClassToSerialize
            {
                Property = "PropertyValue",
            };
            var builder = new StringBuilder();
            using (var writer = new StringWriter(builder))
            {
                serializer.Serialize(writer, instance);
            }
            serialized = builder.ToString();
        }
    }

    // per deserialize session
    using (var algorithm = new RijndaelManaged
    {
        IV = initVector,
        Key = key
    })
    {
        using (factory.GetDecryptSession(algorithm))
        using (var stringReader = new StringReader(serialized))
        using (var jsonReader = new JsonTextReader(stringReader))
        {
            var deserialized = serializer.Deserialize<ClassToSerialize>(jsonReader);
            Console.WriteLine(deserialized.Property);
        }
    }
}

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 100.0%