C#使用XmlEDocument实现数据文件安全存储功能
来源:互联网 发布:python split函数用法 编辑:程序博客网 时间:2024/06/15 20:21
本文讲解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 : XmlDocument
10 {
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");
代码写法完全一样,达到效果确是完全不同。
- C#使用XmlEDocument实现数据文件安全存储功能
- 【MS SQL Server】使用【数据库收缩功能】实现多个数据文件的合并
- 使用Oracle存储过程导入导出数据文件
- C# DataGridView分页功能(SQL分页存储过程实现)
- C# 使用WebRequest 实现FTP常用功能
- C#使用TcpClient实现telnet功能
- 使用C#实现网络时间同步功能
- C#使用TcpClient实现telnet功能
- Java8的HashMap详解(存储结构,功能实现,扩容优化,线程安全,遍历方法)
- Java程序:使用LinkedList存储扑克牌,实现洗牌功能
- 使用socket实现简单数据文件传输
- php实现安全下载功能
- mysql存储过程安全使用
- c#实现ftp功能
- c#实现ftp功能
- C#实现下载功能
- C#实现打印功能
- C# 实现打印功能
- Android中在屏幕上涂鸦的例子
- Android 开发环境的搭建之Linux
- 什么叫牛B,这个渲染的很精彩
- BlackBerry 蓝牙编程(二)
- 函数指针Function Pointer
- C#使用XmlEDocument实现数据文件安全存储功能
- 解决SharePoint中GridView导出Excel按钮的问题
- C++应该支持分离声明类
- Web开发必知的八种隔离级别
- GameJS——Game Library written in JavaScript
- C# WinForm打开PDF文件
- 图
- 什么叫内连接、外连接、左连接、右连接
- Beer-v4