This repository has been archived by the owner on Nov 29, 2023. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Snippets.cs
77 lines (67 loc) · 2.07 KB
/
Snippets.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
using System.Security.Cryptography;
using Newtonsoft.Json;
using Newtonsoft.Json.Encryption;
class Snippets
{
void Workflow()
{
#region Workflow
// 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;
#region serialize
// per serialize session
using (var algorithm = new RijndaelManaged
{
Key = key
})
{
//TODO: store initVector for use in deserialization
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();
}
}
#endregion
#region deserialize
// 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);
}
}
#endregion
#endregion
}
class ClassToSerialize
{
public string Property { get; set; } = null!;
}
}