我自己的超强的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;
   }
  }

 }
}
 

Unity对XML文件加密

ResourceFrom: 为什么要对xml加密,众所周知的对于一些客户端的游戏或者是单机游戏,xml存档如果不做特殊处理(加密和隐藏)那么玩家自己是可以打开并且修改的。玩过红色警戒的童鞋都知道,可...
  • wuming22222
  • wuming22222
  • 2014年10月08日 16:45
  • 918

《我如何自己做自己的导师》

同学可能会问“很多人已经批评我太个人主义了,我还向自己学习,不是自恋吗?”。不是的,事实上,我们很少理性的认识自己是谁,并向自己学习。有谁知道自己的口音和语调是什么样的,请举手,不到三分之一。你看,我...
  • killwho
  • killwho
  • 2015年06月08日 16:04
  • 2488

字符串加密解密类[封装][C#]

 using System;using System.Text;using System.Security.Cryptography;using System.IO;/**//// /// 字符串DE...
  • ikmb
  • ikmb
  • 2008年03月02日 09:12
  • 472

MD5加密类~~可以直接使用的(java)

在做用户登录时,为了防止黑客,保护用户权益,常常要用到加密,下面给大家介绍一种常用的MD5加密,其实这个原理很简单的,就是把用户输入的字符串,转化成复杂的字符串,即使是被盗了,也是没有什么危害的。在程...
  • Codegeek_jfl
  • Codegeek_jfl
  • 2015年12月25日 11:23
  • 553

我是自己命运的主宰,我是自己灵魂的船长!~

我是自己命运的主宰,我是自己灵魂的船长!~
  • zhouxue
  • zhouxue
  • 2005年01月26日 14:00
  • 585

【转】雷军给程序员五点建议

这是我为12月4日开始的“2008软件开发2.0技术大会”准备的讲稿。到了现场,我发现这个讲稿对现场近千人的技术高手不适合,只好临时讲了移动互联网的趋势。 致刚入门的程序员五点建议 每个IT企业,尤其...
  • cheney535
  • cheney535
  • 2008年12月12日 10:19
  • 464

【HTML/XML 6】XML文档的基本组成

导读:大致上,一个XML文档可以由三个部分组成,即声明区、定义区和文档主体区。在XML文档中,各个组成部分都包含特定的内容,有着不同的作用。本篇博客,通过分析上篇博客中的XML实例,来了解XML文档 ...
  • u013034889
  • u013034889
  • 2016年01月12日 23:00
  • 876

Java常用的加密解密类

最近做一个项目,想到以前所有的项目在用户注册与登录及所有涉及用户自身隐私的信息进行提交到后台时都没有进行加密处理,甚至直接以明文方式在网络上传输,同时直接以明文的方式存到数据库中。所以想到需要先进行加...
  • wyc_cs
  • wyc_cs
  • 2013年04月12日 14:33
  • 1724

自己写一个java.lang.String

可以,但是即使你写了这个类,也没有用。 这个问题涉及到加载器的委托机制,在类加载器的结构图(在下面)中, BootStrap是顶层父类,ExtClassLoader是BootStrap类的子类,Ex...
  • zbuger
  • zbuger
  • 2016年04月02日 11:07
  • 431

加密算法(自己写)java自己给明文密码加密

1.创建加密字典 public static Map getEncryptMapData() { Map map = new HashMap(); map.put("0", "a")...
  • Hi_Boy_
  • Hi_Boy_
  • 2017年10月27日 11:28
  • 166
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:我自己的超强的XML文档加密类
举报原因:
原因补充:

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