Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using Newtonsoft.Json;
- using MirzaCryptoHelpers.Common;
- using MirzaCryptoHelpers.Hashings;
- using MirzaCryptoHelpers.SymmetricCryptos;
- namespace JsonCollection
- {
- public class Person
- {
- public string FirstName { get; set; }
- public string LastName { get; set; }
- public string Job { get; set; }
- public Address Address { get; set; }
- }
- public class Address
- {
- public string AddressLine { get; set; }
- public string City { get; set; }
- public string Region { get; set; }
- public string Country { get; set; }
- }
- class Program
- {
- //Static password.
- //Note: Jangan pernah save password seperti ini. Ini hanya sample!
- private static string AES_KEY = "@#Th!$_Is_N0t_$tr0n9_PWD";
- /// <summary>
- /// Method untuk save data ke file.
- /// Data `people` dan nama file atau `filename` tidak boleh kosong
- /// </summary>
- /// <param name="people">Data orang</param>
- /// <param name="filename">Nama file</param>
- public static void SaveJson(List<Person> people, string filename)
- {
- if (people == null)
- throw new ArgumentNullException(nameof(people));
- if (string.IsNullOrEmpty(filename))
- throw new ArgumentNullException(nameof(filename));
- //Proses encyption dengan algoritma AES-256 bit
- //Encrypt value property dari data people
- AESCrypto aes = new AESCrypto();
- foreach(Person person in people)
- {
- person.FirstName = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.FirstName), AES_KEY));
- person.LastName = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.LastName), AES_KEY));
- person.Job = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Job), AES_KEY));
- person.Address.AddressLine = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.AddressLine), AES_KEY));
- person.Address.City = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.City), AES_KEY));
- person.Address.Region = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.Region), AES_KEY));
- person.Address.Country = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.Country), AES_KEY));
- }
- //Buat StreamWriter untuk write data ke target file.
- //Note: append sengaja dibuat false agar file selalu diisi dengan newdata
- using (StreamWriter writer = new StreamWriter(path:filename,append:false))
- {
- //Proses serialization. Formatting.Indented artinya jsonnya akan disave dengan bentuk ter-format/rapi
- string json = JsonConvert.SerializeObject(people, Formatting.Indented);
- //Write json data ke file
- writer.Write(json);
- writer.Flush();
- Console.WriteLine($"Data has been saved to {filename}\n");
- }
- }
- /// <summary>
- /// Method untuk membaca json file dan meng-convert (deserialize) datanya
- /// ke class yang memiliki property dan tipe data yang sama
- /// </summary>
- /// <param name="filename">Nama file yang akan di load</param>
- public static void LoadJsonFile(string filename)
- {
- if (string.IsNullOrEmpty(filename))
- throw new ArgumentNullException(nameof(filename));
- //Check apabila file tidak ditemukan maka lempar error ke dev
- if (!File.Exists(filename))
- throw new FileNotFoundException("File tidak ditemukan");
- //Baca file menggunakan StreamReader
- using (StreamReader reader = new StreamReader(filename))
- {
- //Baca json file dan tampung di variable jsonData
- string jsonData = reader.ReadToEnd();
- //Proses de-serialization
- List<Person> people = JsonConvert.DeserializeObject<List<Person>>(jsonData);
- //Apabila data tidak kosong maka decrypt dan tampilkan.
- if(people!=null && people.Count>0)
- {
- Console.WriteLine("#All people data:\n");
- //Proses decryption dengan algoritma AES-256 bit
- AESCrypto aes = new AESCrypto();
- foreach (Person person in people)
- {
- person.FirstName = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.FirstName), AES_KEY));
- person.LastName = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.LastName), AES_KEY));
- person.Job = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Job), AES_KEY));
- person.Address.AddressLine = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.AddressLine), AES_KEY));
- person.Address.City = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.City), AES_KEY));
- person.Address.Region = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.Region), AES_KEY));
- person.Address.Country = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.Country), AES_KEY));
- //Tampilkan
- Console.WriteLine($"`FirstName`:`{person.FirstName}`, " +
- $"`LastName`:`{person.LastName}`, " +
- $"`Job`:`{person.Job}`, " +
- $"`AddressLine`:`{person.Address?.AddressLine}`, " +
- $"`City`:`{person.Address?.City}`, " +
- $"`Region`:`{person.Address?.Region}`," +
- $"`Country`:`{person.Address?.Country}`");
- }
- }
- }
- }
- /// <summary>
- /// Method ini digunakan untuk membuat fake static data hanya untuk sample saja
- /// </summary>
- /// <returns></returns>
- public static List<Person> ConstructData()
- {
- return new List<Person>
- {
- new Person
- {
- FirstName = "Mirza Ghulam",
- LastName = "Rasyid",
- Job = "Software Developer",
- Address = new Address
- {
- AddressLine = "St. ABC 221",
- City = "West Jakarta",
- Region = "Jakarta",
- Country = "Indonesia"
- }
- },
- new Person
- {
- FirstName = "Michael",
- LastName = "Hawk",
- Job = "Senior Pentester",
- Address = new Address
- {
- AddressLine = "St. DFX 112",
- City = "North Jakarta",
- Region = "Jakarta",
- Country = "Indonesia"
- }
- },
- new Person
- {
- FirstName = "Razor",
- LastName = "Engine",
- Job = "Senior System Engineer",
- Address = new Address
- {
- AddressLine = "One Microsoft Way",
- City = "Seattle",
- Region = "Washington",
- Country = "USA"
- }
- }
- };
- }
- static void Main(string[] args)
- {
- List<Person> people = ConstructData();
- //Save data
- SaveJson(people, @"D:\people.json");
- //Load saved data
- LoadJsonFile(@"D:\people.json");
- Console.ReadLine();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement