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;
        }