Advertisement
Guest User

Untitled

a guest
Feb 20th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.44 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using Newtonsoft.Json;
  8. using MirzaCryptoHelpers.Common;
  9. using MirzaCryptoHelpers.Hashings;
  10. using MirzaCryptoHelpers.SymmetricCryptos;
  11. namespace JsonCollection
  12. {
  13.  
  14. public class Person
  15. {
  16. public string FirstName { get; set; }
  17. public string LastName { get; set; }
  18. public string Job { get; set; }
  19. public Address Address { get; set; }
  20. }
  21. public class Address
  22. {
  23. public string AddressLine { get; set; }
  24. public string City { get; set; }
  25. public string Region { get; set; }
  26. public string Country { get; set; }
  27. }
  28. class Program
  29. {
  30.  
  31. //Static password.
  32. //Note: Jangan pernah save password seperti ini. Ini hanya sample!
  33. private static string AES_KEY = "@#Th!$_Is_N0t_$tr0n9_PWD";
  34.  
  35.  
  36. /// <summary>
  37. /// Method untuk save data ke file.
  38. /// Data `people` dan nama file atau `filename` tidak boleh kosong
  39. /// </summary>
  40. /// <param name="people">Data orang</param>
  41. /// <param name="filename">Nama file</param>
  42. public static void SaveJson(List<Person> people, string filename)
  43. {
  44. if (people == null)
  45. throw new ArgumentNullException(nameof(people));
  46. if (string.IsNullOrEmpty(filename))
  47. throw new ArgumentNullException(nameof(filename));
  48.  
  49. //Proses encyption dengan algoritma AES-256 bit
  50. //Encrypt value property dari data people
  51. AESCrypto aes = new AESCrypto();
  52. foreach(Person person in people)
  53. {
  54. person.FirstName = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.FirstName), AES_KEY));
  55. person.LastName = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.LastName), AES_KEY));
  56. person.Job = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Job), AES_KEY));
  57. person.Address.AddressLine = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.AddressLine), AES_KEY));
  58. person.Address.City = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.City), AES_KEY));
  59. person.Address.Region = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.Region), AES_KEY));
  60. person.Address.Country = BitHelpers.ConvertToBase64String(aes.Encrypt(BitHelpers.ConvertStringToBytes(person.Address.Country), AES_KEY));
  61.  
  62. }
  63.  
  64.  
  65.  
  66. //Buat StreamWriter untuk write data ke target file.
  67. //Note: append sengaja dibuat false agar file selalu diisi dengan newdata
  68. using (StreamWriter writer = new StreamWriter(path:filename,append:false))
  69. {
  70. //Proses serialization. Formatting.Indented artinya jsonnya akan disave dengan bentuk ter-format/rapi
  71. string json = JsonConvert.SerializeObject(people, Formatting.Indented);
  72.  
  73. //Write json data ke file
  74. writer.Write(json);
  75. writer.Flush();
  76.  
  77. Console.WriteLine($"Data has been saved to {filename}\n");
  78. }
  79. }
  80.  
  81. /// <summary>
  82. /// Method untuk membaca json file dan meng-convert (deserialize) datanya
  83. /// ke class yang memiliki property dan tipe data yang sama
  84. /// </summary>
  85. /// <param name="filename">Nama file yang akan di load</param>
  86. public static void LoadJsonFile(string filename)
  87. {
  88. if (string.IsNullOrEmpty(filename))
  89. throw new ArgumentNullException(nameof(filename));
  90.  
  91. //Check apabila file tidak ditemukan maka lempar error ke dev
  92. if (!File.Exists(filename))
  93. throw new FileNotFoundException("File tidak ditemukan");
  94.  
  95. //Baca file menggunakan StreamReader
  96. using (StreamReader reader = new StreamReader(filename))
  97. {
  98. //Baca json file dan tampung di variable jsonData
  99. string jsonData = reader.ReadToEnd();
  100.  
  101. //Proses de-serialization
  102. List<Person> people = JsonConvert.DeserializeObject<List<Person>>(jsonData);
  103.  
  104. //Apabila data tidak kosong maka decrypt dan tampilkan.
  105. if(people!=null && people.Count>0)
  106. {
  107.  
  108. Console.WriteLine("#All people data:\n");
  109.  
  110. //Proses decryption dengan algoritma AES-256 bit
  111. AESCrypto aes = new AESCrypto();
  112. foreach (Person person in people)
  113. {
  114. person.FirstName = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.FirstName), AES_KEY));
  115. person.LastName = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.LastName), AES_KEY));
  116. person.Job = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Job), AES_KEY));
  117. person.Address.AddressLine = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.AddressLine), AES_KEY));
  118. person.Address.City = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.City), AES_KEY));
  119. person.Address.Region = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.Region), AES_KEY));
  120. person.Address.Country = BitHelpers.ConvertBytesToString(aes.Decrypt(BitHelpers.ConvertFromBase64String(person.Address.Country), AES_KEY));
  121.  
  122. //Tampilkan
  123. Console.WriteLine($"`FirstName`:`{person.FirstName}`, " +
  124. $"`LastName`:`{person.LastName}`, " +
  125. $"`Job`:`{person.Job}`, " +
  126. $"`AddressLine`:`{person.Address?.AddressLine}`, " +
  127. $"`City`:`{person.Address?.City}`, " +
  128. $"`Region`:`{person.Address?.Region}`," +
  129. $"`Country`:`{person.Address?.Country}`");
  130. }
  131.  
  132.  
  133. }
  134. }
  135. }
  136.  
  137. /// <summary>
  138. /// Method ini digunakan untuk membuat fake static data hanya untuk sample saja
  139. /// </summary>
  140. /// <returns></returns>
  141. public static List<Person> ConstructData()
  142. {
  143. return new List<Person>
  144. {
  145. new Person
  146. {
  147. FirstName = "Mirza Ghulam",
  148. LastName = "Rasyid",
  149. Job = "Software Developer",
  150. Address = new Address
  151. {
  152. AddressLine = "St. ABC 221",
  153. City = "West Jakarta",
  154. Region = "Jakarta",
  155. Country = "Indonesia"
  156. }
  157. },
  158. new Person
  159. {
  160. FirstName = "Michael",
  161. LastName = "Hawk",
  162. Job = "Senior Pentester",
  163. Address = new Address
  164. {
  165. AddressLine = "St. DFX 112",
  166. City = "North Jakarta",
  167. Region = "Jakarta",
  168. Country = "Indonesia"
  169. }
  170. },
  171. new Person
  172. {
  173. FirstName = "Razor",
  174. LastName = "Engine",
  175. Job = "Senior System Engineer",
  176. Address = new Address
  177. {
  178. AddressLine = "One Microsoft Way",
  179. City = "Seattle",
  180. Region = "Washington",
  181. Country = "USA"
  182. }
  183. }
  184. };
  185. }
  186. static void Main(string[] args)
  187. {
  188. List<Person> people = ConstructData();
  189.  
  190. //Save data
  191. SaveJson(people, @"D:\people.json");
  192.  
  193.  
  194. //Load saved data
  195. LoadJsonFile(@"D:\people.json");
  196.  
  197. Console.ReadLine();
  198. }
  199. }
  200. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement