一个文件加密类

    技术2022-05-11  73

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

    namespace Hxh.API{ /// <summary> /// code by 黄新华 /// </summary> public class CryptoFile {  private byte[] key;   private byte[] iv;   SymmetricAlgorithm symm;

      public CryptoFile()  {   //   // TODO: 在此处添加构造函数逻辑   //   symm = new RijndaelManaged();   this.key=new byte[]{169,209,120,221,50,85,99,196,135,108,172,183,3,68,88,248,216,.........};   this.iv=new byte[]{99,182,112,161,26,185,11,55,140,224,81,21,............};

       //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);   Xdoc.Load(sr);   fsIn.Close();   sr.Close();   return Xdoc;

      }

      /// <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, null);   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();

      }

      /// <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;    }   }

     }} 


    最新回复(0)