internal static void SaveDatabase(string path, string password, string steamPath, List<SteamLogin> logins, bool hide) { try { SteamLoginDatabase sld = new SteamLoginDatabase(); sld.Logins = logins; sld.SteamPath = steamPath; sld.HideInTray = hide; using (FileStream fs = new FileStream(path, FileMode.Create)) { fs.Write("SLM"); fs.Write(1); RijndaelManaged rm = new RijndaelManaged(); using (CryptoStream cs = new CryptoStream(fs, rm.CreateEncryptor(CreateKeyFrom(password), GetIV()), CryptoStreamMode.Write)) { XmlSerializer xsr = new XmlSerializer(sld.GetType()); XmlWriterSettings xws = new XmlWriterSettings(); xws.Indent = true; xws.IndentChars = "\t"; xws.CloseOutput = false; using (XmlWriter xw = XmlWriter.Create(cs, xws)) { xsr.Serialize(xw, sld); } } } } catch (Exception) { } }
internal static bool IsValidDatabase(string path, string password, out List<SteamLogin> logins, out string steamPath, out bool hide) { if (!File.Exists(path)) { logins = new List<SteamLogin>(); steamPath = ""; hide = true; return false; } try { using (FileStream fs = new FileStream(path, FileMode.Open)) { byte[] prologue = new byte[] { // SLM0001 83, 76, 77, 1, 0, 0, 0 }; byte[] readed = new byte[7]; fs.Read(readed, 0, 7); if (!prologue.SequenceEqual(readed)) { logins = new List<SteamLogin>(); steamPath = ""; hide = true; return false; } SteamLoginDatabase sld = new SteamLoginDatabase(); RijndaelManaged rm = new RijndaelManaged(); using (CryptoStream cs = new CryptoStream(fs, rm.CreateDecryptor(CreateKeyFrom(password), GetIV()), CryptoStreamMode.Read)) { XmlSerializer xsr = new XmlSerializer(sld.GetType()); XmlReaderSettings xrs = new XmlReaderSettings(); xrs.CloseInput = false; using (XmlReader xr = XmlReader.Create(cs, xrs)) { sld = (SteamLoginDatabase)xsr.Deserialize(xr); } steamPath = sld.SteamPath; logins = sld.Logins; hide = sld.HideInTray; } } } catch (Exception) { logins = new List<SteamLogin>(); steamPath = ""; hide = true; return false; } return true; }