C#使用XmlEDocument实现数据文件安全存储功能

mac2022-06-30  26

本文讲解C#使用XmlEDocument来实现象QQ记录登录过用户名、密码等信息的安全性。类似QQ登录窗口的帐号输入框,这种数据的本地存储

可以把要考虑安全性因素的信息以XML的格式写入内存流中(因为XML操作非常方便),再把整个内存流中加密,保 存成文件(扩展名就无谓了,可以不用.xml,你可以用.dat、.db显得专业点,哈哈)。想到这里,就开始动手,为了提高代码的重用率,把XmlDocument自己封装一下,取名XmlEDocument。代码如下: Code [http://www.xueit.com] 1 using System.Collections.Generic; 2 using System.IO; 3 using System.Security.Cryptography; 4 using System.Text; 5 using System.Xml; 6  7 namespace DotNet.Common 8 { 9     public class XmlEDocument : XmlDocument10     {11         private const string ENCR_KEY = "zhuxiaoc";12         private const int READ_SIZE = 16*1024;13 14         public override void Load(string filename)15         {16             var fileStream = new FileStream(filename, FileMode.Open);17             Load(fileStream);18         }19 20         public override void Load(Stream inStream)21         {22             var bsXml = new List<byte>();23             var b = new byte[READ_SIZE];24             int iLength;25             while ((iLength = inStream.Read(b, 0, READ_SIZE)) > 0)26             {27                 for (int i = 0; i < iLength; i  )28                 {29                     bsXml.Add(b[i]);30                 }31             }32             inStream.Close();33             var msEXml = new MemoryStream();34             var des = new DESCryptoServiceProvider();35             byte[] byKey = Encoding.UTF8.GetBytes(ENCR_KEY.Substring(0, 8));36             byte[] IV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};37             var cs = new CryptoStream(msEXml, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);38             cs.Write(bsXml.ToArray(), 0, bsXml.ToArray().Length);39             cs.FlushFinalBlock();40             base.Load(new MemoryStream(msEXml.ToArray()));41         }42 43         public override void Save(string filename)44         {45             if(!File.Exists(filename))46                 File.Create(filename).Close();47 48             var fileStream = new FileStream(filename, FileMode.Truncate);49             Save(fileStream);50             fileStream.Close();51         }52 53         public override void Save(Stream outStream)54         {55             var msXml = new MemoryStream();56             base.Save(msXml);57             var des = new DESCryptoServiceProvider();58             byte[] byKey = Encoding.UTF8.GetBytes(ENCR_KEY.Substring(0, 8));59             byte[] IV = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};60             var cs = new CryptoStream(outStream, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);61             cs.Write(msXml.ToArray(), 0, msXml.ToArray().Length);62             cs.FlushFinalBlock();63             msXml.Close();64         }65     }66 }写个简单的例子吧:

这是创建XML Code [http://www.xueit.com]1 var xmlDocument = new XmlDocument();2 var dec = xmlDocument.CreateXmlDeclaration("1.0", "utf-8", null);3 xmlDocument.AppendChild(dec);4 var root = xmlDocument.CreateElement("Users");5 xmlDocument.AppendChild(root);6 xmlDocument.Save("c://test.xml");这是创建加密的XML Code [http://www.xueit.com]1 var xmlEDocument = new XmlEDocument();2 var dec = xmlEDocument.CreateXmlDeclaration("1.0", "utf-8", null);3 xmlEDocument.AppendChild(dec);4 var root = xmlEDocument.CreateElement("Users");5 xmlEDocument.AppendChild(root);6 xmlEDocument.Save("c://test.dat");

代码写法完全一样,达到效果确是完全不同。

转载于:https://www.cnblogs.com/deepwishly/archive/2010/09/08/2551201.html

最新回复(0)