我自己的超强的XML文档加密类

原创 2007年09月13日 11:20:00

using System;
using System.IO;
using System.Security.Cryptography;
using System.Xml;
using System.Data;

namespace Hxh.Api
{
 /// <summary>
 /// CryptoFile 的摘要说明。
 /// </summary>
 public class CryptoFile
 {
  private byte[] key;
  private byte[] iv;
  SymmetricAlgorithm symm;

  public CryptoFile()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
   symm = new RijndaelManaged();
   this.key=new byte[]{。。。。。};
   this.iv=new byte[]{。。。};

   //Get the key and IV.

  }

  /// <summary>
  /// 读取加密文件到流
  /// </summary>
  /// <param name="file"></param>
  /// <returns></returns>
  public XmlDocument Read(string file)
  {

   FileStream fsIn = File.Open(file,FileMode.Open,FileAccess.Read);
   XmlDocument Xdoc=new XmlDocument();

   ICryptoTransform transform = symm.CreateDecryptor(key,iv);
   CryptoStream cstream = new CryptoStream(fsIn,transform,CryptoStreamMode.Read);
   StreamReader sr=new StreamReader(cstream,System.Text.Encoding.UTF8);
   Xdoc.Load(sr);
   fsIn.Close();
   sr.Close();
   return Xdoc;
  }

  public DataSet ReadXml(string file)
  {
   FileStream fsIn = File.Open(file,FileMode.Open,FileAccess.Read);
   DataSet ds = new DataSet();

   ICryptoTransform transform = symm.CreateDecryptor(key,iv);
   CryptoStream cstream = new CryptoStream(fsIn,transform,CryptoStreamMode.Read);
   StreamReader sr=new StreamReader(cstream,System.Text.Encoding.UTF8);
   ds.ReadXml(sr,XmlReadMode.Auto);
   fsIn.Close();
   sr.Close();
   return ds;
  }

  /// <summary>
  /// 将流加密写入文件
  /// </summary>
  /// <param name="fsIn"></param>
  /// <param name="fileName"></param>
  public void Write(ref XmlDocument Xdoc,string fileName)
  {
   FileStream fsOut = File.Open(fileName, FileMode.OpenOrCreate,FileAccess.Write);
   MemoryStream ms = new MemoryStream();
   XmlTextWriter writer = new XmlTextWriter(ms,System.Text.Encoding.UTF8);
   writer.Formatting = Formatting.Indented;
   Xdoc.Save(writer);
   ms.Seek(0,SeekOrigin.Begin);

   ICryptoTransform transform = symm.CreateEncryptor(key,iv);
   CryptoStream cstream = new CryptoStream(fsOut,transform,CryptoStreamMode.Write);
   
   BinaryReader br = new BinaryReader(ms);
   // 读取源文件到cryptostream
   cstream.Write(br.ReadBytes((int)ms.Length),0,(int)ms.Length);
   cstream.FlushFinalBlock();
   cstream.Close();
   ms.Close();
   fsOut.Close();

  }

  public void WriteXml(DataSet ds,string fileName)
  {
   FileStream fsOut = File.Open(fileName, FileMode.OpenOrCreate,FileAccess.Write);
   MemoryStream ms = new MemoryStream();
   XmlTextWriter writer = new XmlTextWriter(ms,System.Text.Encoding.UTF8);
   writer.Formatting = Formatting.Indented;
   ds.WriteXml(writer,XmlWriteMode.WriteSchema);
   ms.Seek(0,SeekOrigin.Begin);

   ICryptoTransform transform = symm.CreateEncryptor(key,iv);
   CryptoStream cstream = new CryptoStream(fsOut,transform,CryptoStreamMode.Write);
   
   BinaryReader br = new BinaryReader(ms);
   // 读取源文件到cryptostream
   cstream.Write(br.ReadBytes((int)ms.Length),0,(int)ms.Length);
   cstream.FlushFinalBlock();
   cstream.Close();
   ms.Close();
   fsOut.Close();

  }


  /// <summary>
  /// 加密一个存在的文件
  /// </summary>
  /// <param name="file"></param>
  public void Encrypto(string file)
  {
   string tempfile = Path.GetTempFileName();
   //打开指定的文件
   FileStream fsIn = File.Open(file,FileMode.Open,
    FileAccess.Read);
   FileStream fsOut = File.Open(tempfile, FileMode.Open,
    FileAccess.Write);
   //定义对称算法对象实例和接口
   ICryptoTransform transform = symm.CreateEncryptor(key,iv);
   CryptoStream cstream = new CryptoStream(fsOut,transform,CryptoStreamMode.Write);

   BinaryReader br = new BinaryReader(fsIn);
   // 读取源文件到cryptostream
   cstream.Write(br.ReadBytes((int)fsIn.Length),0,(int)fsIn.Length);
   cstream.FlushFinalBlock();
   cstream.Close();
   fsIn.Close();
   fsOut.Close();

   File.Delete(file);
   File.Move(tempfile,file);
  }

  /// <summary>
  /// 解密一个存在的文件
  /// </summary>
  /// <param name="file"></param>
  public void Decrypto(string file)
  {
   string tempfile = Path.GetTempFileName();
   //打开指定的文件
   FileStream fsIn = File.Open(file,FileMode.Open,FileAccess.Read);
   FileStream fsOut = File.Open(tempfile, FileMode.Open,FileAccess.Write);
   //定义对称算法对象实例和接口
   ICryptoTransform transform = symm.CreateDecryptor(key,iv);
   CryptoStream cstream = new CryptoStream(fsOut,transform,CryptoStreamMode.Write);

   BinaryReader br = new BinaryReader(fsIn);
   // 读取源文件到cryptostream
   cstream.Write(br.ReadBytes((int)fsIn.Length),0,(int)fsIn.Length);
   cstream.FlushFinalBlock();
   cstream.Close();
   fsIn.Close();
   fsOut.Close();

   File.Delete(file);
   File.Move(tempfile,file);

  }

  /// <summary>
  /// 设置加密或解密的初始化向量
  /// </summary>
  /// <param name="s">长度等于8的ASCII字符集的字符串</param>
  public void SetIV(string s)
  {
   if(s.Length != 8)
   {
    this.iv =null;
    return;
   }
   try
   {
    this.iv =System.Text.Encoding.Default.GetBytes(s);
   }
   catch(System.Exception)
   {
    this.iv = null;
   }
  }
  /// <summary>
  /// 设置加密或解密的密匙
  /// </summary>
  /// <param name="s">长度等于16的ASCII字符集的字符串</param>
  public void SetKey(string s)
  {
   if(s.Length != 16)
   {
    this.key = null;
    return;
   }
   try
   {
    this.key = System.Text.Encoding.Default.GetBytes(s);

   }
   catch(System.Exception)
   {
    this.key = null;
   }
  }

 }
}
 

相关文章推荐

XML文档信息的加密方法及其实现

  • 2011年10月26日 21:15
  • 19KB
  • 下载

如何使用C#加密解密XML文档

 如何使用C#加密解密XML文档       .NETFramework 提供了几种类,可用于对 XML 数据进行加密和解密,以及创建和验证 XML 数字签名。这些类提供了维护 XML 数据的保密性和...

如何使用C#加密解密XML文档

.NET Framework 提供了几种类,可用于对 XML 数据进行加密和解密,以及创建和验证 XML 数字签名。这些类提供了维护 XML 数据的保密性和完整性的方法。在这里,我们只涉及如何使用.N...

基于密度方法的XML文档聚类研究

  • 2011年12月22日 16:02
  • 2.66MB
  • 下载

MFC Markup类的使用 读写XML文档

  • 2011年01月15日 23:24
  • 10.17MB
  • 下载

Java对下面XML文档解析要求封装为两个类

mport javax.xml.bind.annotation.XmlAccessOrder; import javax.xml.bind.annotation.XmlAccessType; impo...

C#XmlHelper操作Xml文档的帮助类

using System.Xml; using System.Data;   namespace DotNet.Utilities {     ///     /// Xml的操作公共类     /...

DOM方式解析XML文档(另2种方式为SAX,STAX),(第二种直接用sax方式用java类实现)

1.      判断浏览器类别,返回xmlhttp function loadXMLDoc(){        varxmlhttp;        if(window.XMLHttpReque...

基于tinyxml类解析XML文档构建数据库

基于tinyxml类解析XML文档构建数据库 数据表格以XML格式存储在XML文档中,通过tinyxml工具解析XML来读取数据库,然后在MFC可编辑表格中实现数据的添加、删除、查询,最后通过重新组装...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我自己的超强的XML文档加密类
举报原因:
原因补充:

(最多只允许输入30个字)