Exemplo n.º 1
0
        private bool SaveToFile(TData data)
        {
            try
            {
                var json = JsonConvert.SerializeObject(data);
                var aes  = EncryptionProvider.EncryptText(json, _StorageSalt);
                var md5  = EncryptionProvider.MD5($"{aes}_{_StorageSalt}");

                var j = new SedeRootDto
                {
                    EncryptedData = aes,
                    Md5           = md5
                };

                var rj = JsonConvert.SerializeObject(j);

                using (var f = new FileStream(_jsonFilePath,
                                              FileMode.Create,
                                              FileAccess.Write,
                                              FileShare.ReadWrite))
                {
                    using (var r = new StreamWriter(f, Encoding.UTF8))
                    {
                        r.Write(rj);
                    }
                }

                return(true);
            }
            catch (Exception e)
            {
                //add logger here
                throw;
            }
        }
Exemplo n.º 2
0
        private TData ReadFromFile()
        {
            try
            {
                if (!File.Exists(_jsonFilePath))
                {
                    this.SaveToFile(default(TData));
                }

                string json;

                using (var f = new FileStream(_jsonFilePath,
                                              FileMode.Open,
                                              FileAccess.Read,
                                              FileShare.ReadWrite))
                {
                    using (var r = new StreamReader(f, Encoding.UTF8))
                    {
                        json = r.ReadToEnd();
                    }
                }

                var data = JsonConvert.DeserializeObject <SedeRootDto>(json);

                if (ReferenceEquals(data, null))
                {
                    File.Delete(_jsonFilePath);
                    return(default(TData));
                }

                var md5 = EncryptionProvider.MD5($"{data.EncryptedData}_{_StorageSalt}");

                if (md5.Equals(data.Md5))
                {
                    var rj = EncryptionProvider.DecryptText(data.EncryptedData, _StorageSalt);
                    return(JsonConvert.DeserializeObject <TData>(rj));
                }

                //todo: Implement safety removing of data file
                File.Delete(_jsonFilePath);
                return(default(TData));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }