/// <summary> /// Wrapper for StreamReader that allows to read Encrypted Files /// </summary> /// <param name="File">File to Read</param> /// <param name="EM">Encryption Method Used</param> /// <param name="Key">Key to Encrypt</param> public PatcherStreamReader(FileStream File, EncrytionMode EM, String Key = "GEM2015!") { switch (EM) { case EncrytionMode.None: sr = new StreamReader(File); break; case EncrytionMode.Standard: case EncrytionMode.Rijndael: sr = new StreamReader(File); byte[] key = new UnicodeEncoding().GetBytes(Key); byte[] crypto = Convert.FromBase64String(sr.ReadToEnd()); byte[] plain = new byte[crypto.Length]; RijndaelManaged rm = new RijndaelManaged() { Padding = PaddingMode.Zeros }; MemoryStream ms = new MemoryStream(crypto); CryptoStream cs = new CryptoStream(ms, rm.CreateDecryptor(key, key), CryptoStreamMode.Read); int count = cs.Read(plain, 0, crypto.Length); cs.Close(); ms.Close(); sr.Close(); MS = new MemoryStream(Encoding.UTF8.GetBytes((Encoding.UTF8.GetString(plain, 0, count).TrimEnd("\0".ToCharArray())))); sr = new StreamReader(MS); break; default: break; } }
/// <summary> /// Wrapper for StreamWriter, allows to write Encrypted files /// </summary> /// <param name="File">File to write to</param> /// <param name="EM">Encryption Method</param> /// <param name="key">Password to Encrypt with</param> public PatcherStreamWriter(FileStream File, EncrytionMode EM, String key = "GEM2015!") { switch (EM) { case EncrytionMode.None: sw = new StreamWriter(File); break; case EncrytionMode.Standard: case EncrytionMode.Rijndael: encrypt = true; sw = new StreamWriter(File); this.Key = new UnicodeEncoding().GetBytes(key); break; default: break; } }
/// <summary> /// Patcher to Generate a PatchList to use with this Patcher /// </summary> /// <param name="File">Handle of the File that should be Used as PatchList</param> public Patcher(string file, string folder, bool encrypt) { this.PatchList = File.Open(file, FileMode.Create, FileAccess.Write, FileShare.None); filePath = folder; if(encrypt) { Encryption = EncrytionMode.Rijndael; } }