登陆界面的数据存储(没有显式使用其他保存媒介)

创建一个WPF应用后,工程目录里会有一个默认app.config文件,这个文件里面可以存储一些程序常用的数据,

并且在编译后生成目录上会有一个xml文件生成,就是记录此数据的。

对于如下界面:


app.config数据中的格式为以下:


 
其中节点中包含了上图中所显示的数据,savePath是修改后的,其实在代码中给了默认值。

在代码中可以通过ConfigurationManager类中的AppSettings属性来获取具体的值:

        /// /// 读取客户设置 settingName对应app.config的AppSettings里的Key/// /// /// public static string GetSettingString(string settingName){try{string settingString = ConfigurationManager.AppSettings[settingName].ToString();return settingString;}catch (Exception){return null;}}

更新其中的值:

        /// /// 更新设置/// /// /// 
	/// 没有提供直接修改的值的方法,所以需要通过先删除后添加的方式修改值public static void UpdateSettingString(string settingName, string valueName){Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);if (ConfigurationManager.AppSettings[settingName] != null){config.AppSettings.Settings.Remove(settingName);}config.AppSettings.Settings.Add(settingName, valueName);config.Save(ConfigurationSaveMode.Full);ConfigurationManager.RefreshSection("appSettings");}

在文本框里面添加LostFocus事件触发更新即可修改。

在生成的目录里面可以看到以*.exe程序结尾的程序和以*exe.Config结尾的文件,*.exe是程序,*exe.Config的就是appConfig.xml经过处理的配置文件了,里面的内容为:


 
可以看到,生成数据里面和之前是一样的。
然而到这里,问题来了,登陆密码及用户名这样敞开的真的好吗?

对于一些隐秘数据可以采用加密的方式输出。登陆界面上需要保存用户名和密码之类的数据,生成的xml文件不能以明文的方式存储,不然就可以查看到,这是不安全的,所以在生成过程中可以采用加密的方式。

Configuration类中包含的ConfigurationSection提供加密的方法,示例代码:

        //加密app.Config中的指定节// sectionName为节点 eg:appSettingsprivate void ProtectSection(string sectionName){Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);ConfigurationSection section = config.GetSection(sectionName);if (section != null && !section.SectionInformation.IsProtected){section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");config.Save();}}
经过加密后的*exe.Config文件里面显示为:


 AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAQN3ZN4bHl0+6ROYrpkB78gQAAAACAAAAAAADZgAAwAAAABAAAAB63UqbYejevg4TL4eTUdC6AAAAAASAAACgAAAAEAAAAMk5zWOml6z93QekcSOuo33oAQAA3hi+/3jHcPSPuRODe23cGhda0ZaC33MIU7ZIYqg3wcI44c7GxCmiCH5sB7vFGb4rAwOuJi20nxWpMOTwklqAyxBxlMtTVDvf6KT1eo89tZ8dAGhHt1Dmp2jSEZL2es/719ALgTf0V1E/4Q3ZjOQ14i/eXxM4aVypiVswXwJLZb7QT0ohIQq5MDeEuyR4nstl/pMdH5MG8F8vrE3YC7VIUWqC+W15V6YInO4fICirLyYi/kxWA/5ueHivGbJR/+l+F54BZBc0OAwTEnw58ZYI9UFOP7WhXUs3HyLH0sMS1B/5KVxZLpPvNyzj9b9aSReUICRSyQYDQAjq08g91gWG6mTkcMfJL/KjkQaYW8Yux5Me4+VaeXdk0AVdRzISDFRGyadHs3KtVXHPhK7KEHWmF6bS94t73ZrWsa0qnArULsb4OIlIysdW6WTVDNC+tZpNFLVuS3Y5JznOxGYsHShPsF4aXXksYJSK3+Hb0jjKoJFEK5xXs9BNA/+Pd0PIIGMHItTe9x/igjCnfQRZC2jrkUh65m6XzaKYNc1BjZRPAfv9qRc8cq0eUy9FiCp8HztzwviDl3P4kLm2jCzmrK4lpRTbHYwhBtIzSRU/V/NwQPNztnyUwC53LtcWUFUFZUk/BZkJ3U1id1wUAAAAVaa81Jhbj9dasmvS2T96bjMNq44=
可以看到节点已经显示为加密了。

在使用过程中,并不需要去界面,这部分会自动完成的,保证在使用过程中数据使用的是解密后的数据。下面还是提供对应的解密方法

解密方法:

//解密app.Config中的指定节private void UnProtectSection(string sectionName){Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);ConfigurationSection section = config.GetSection(sectionName);if (section != null && section.SectionInformation.IsProtected){section.SectionInformation.UnprotectSection();config.Save();}}

使用Configuretion类需要引用System.Configuration命名空间。

选择路径框需要引用System.Windows.Forms命名空间以及添加System.Windows.Forms程序集。






本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部