DES(Data Encryption Standard)加密整理(转)

using System;
using System.IO;
using System.Text;
using System.Security.Cryptography;
using System.Web;

namespace Test.Com
{
 /**////
 /// DESEncryptor 的摘要说明。
 ///
 public class DESEncryptor
 {
  #region 私有成员
  /**////
  /// 输入字符串
  ///
  private string inputString=null;
  /**////
  /// 输出字符串
  ///
  private string outString=null;
  /**////
  /// 输入文件路径
  ///
  private string inputFilePath=null;
  /**////
  /// 输出文件路径
  ///
  private string outFilePath=null;
  /**////
  /// 加密密钥
  ///
  private string encryptKey=null;
  /**////
  /// 解密密钥
  ///
  private string decryptKey=null;
  /**////
  /// 提示信息
  ///
  private string noteMessage=null;

  #endregion

  #region 公共属性
  /**////
  /// 输入字符串
  ///
  public string InputString
  {
   get{return inputString;}
   set{inputString=value;}
  }
  /**////
  /// 输出字符串
  ///
  public string OutString
  {
   get{return outString;}
   set{outString=value;}
  }
  /**////
  /// 输入文件路径
  ///
  public string InputFilePath
  {
   get{return inputFilePath;}
   set{inputFilePath=value;}
  }

  /**////
  /// 输出文件路径
  ///
  public string OutFilePath
  {
   get{return outFilePath;}
   set{outFilePath=value;}
  }
  /**////
  /// 加密密钥
  ///
  public string EncryptKey
  {
   get{return encryptKey;}
   set{encryptKey=value;}
  }
  /**////
  /// 解密密钥
  ///
  public string DecryptKey
  {
   get{return decryptKey;}
   set{decryptKey=value;}
  }

  /**////
  /// 错误信息
  ///
  public string NoteMessage
  {
   get{return noteMessage;}
   set{noteMessage=value;}
  }
  #endregion

  #region 构造函数
  public DESEncryptor()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  #endregion

  #region DES加密字符串
  /**////
  /// 加密字符串
  /// 注意:密钥必须为8位
  ///
  /// 字符串
  /// 密钥
  public  void  DesEncrypt()
  {
   byte[] byKey=null;  
   byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
   try
   {
    byKey = System.Text.Encoding.UTF8.GetBytes(this.encryptKey.Substring(0,8));
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    byte[] inputByteArray = Encoding.UTF8.GetBytes(this.inputString);
    MemoryStream ms = new  MemoryStream();
    CryptoStream cs = new  CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write) ;
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();
    this.outString=Convert.ToBase64String(ms.ToArray());
   }
   catch(System.Exception error)
   {
    this.noteMessage=error.Message;
   }
  }
  #endregion

  #region DES解密字符串
  /**////
  /// 解密字符串
  ///
  /// 加了密的字符串
  /// 密钥
  public void DesDecrypt()
  {
   byte[] byKey = null;
   byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
   byte[] inputByteArray = new Byte[this.inputString.Length];
   try
   {
    byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));
    DESCryptoServiceProvider des = new DESCryptoServiceProvider();
    inputByteArray = Convert.FromBase64String(this.inputString);
    MemoryStream ms = new MemoryStream();
    CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
    cs.Write(inputByteArray, 0, inputByteArray.Length);
    cs.FlushFinalBlock();
    System.Text.Encoding encoding = new System.Text.UTF8Encoding();
    this.outString=encoding.GetString(ms.ToArray());
   }
   catch(System.Exception error)
   {
    this.noteMessage=error.Message;
   }
  }
  #endregion

  #region DES加密文件
  /**////
  /// DES加密文件
  ///
  /// 源文件路径
  /// 输出文件路径
  /// 密钥
  public void FileDesEncrypt()
  {
   byte[] byKey=null;  
   byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
   try
   {
    byKey = System.Text.Encoding.UTF8.GetBytes(this.encryptKey.Substring(0,8));
    FileStream fin = new FileStream(this.inputFilePath, FileMode.Open, FileAccess.Read);
    FileStream fout = new FileStream(this.outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
    fout.SetLength(0);
    //Create variables to help with read and write.
    byte[] bin  = new byte[100]; //This is intermediate storage for the encryption.
    long rdlen  = 0;              //This is the total number of bytes written.
    long totlen = fin.Length;    //This is the total length of the input file.
    int  len;                     //This is the number of bytes to be written at a time.

    DES des = new DESCryptoServiceProvider();         
    CryptoStream encStream = new CryptoStream(fout, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
               
 
    //Read from the input file, then encrypt and write to the output file.
    while(rdlen < totlen)
    {
     len = fin.Read(bin, 0, 100);
     encStream.Write(bin, 0, len);
     rdlen = rdlen + len;
    }
 
    encStream.Close(); 
    fout.Close();
    fin.Close();    

   


   }
   catch(System.Exception error)
   {
    this.noteMessage=error.Message.ToString();
   
   }
  }
  #endregion

  #region DES解密文件
  /**////
  /// 解密文件
  ///
  /// 加密了的文件路径
  /// 输出文件路径
  /// 密钥
  public void FileDesDecrypt()
  {
   byte[] byKey = null;
   byte[] IV= {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};   
   try
   {
    byKey = System.Text.Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));
    FileStream fin = new FileStream(this.inputFilePath, FileMode.Open, FileAccess.Read);
    FileStream fout = new FileStream(this.outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
    fout.SetLength(0);
    //Create variables to help with read and write.
    byte[] bin  = new byte[100]; //This is intermediate storage for the encryption.
    long rdlen  = 0;              //This is the total number of bytes written.
    long totlen = fin.Length;    //This is the total length of the input file.
    int  len;                     //This is the number of bytes to be written at a time.

    DES des = new DESCryptoServiceProvider();         
    CryptoStream encStream = new CryptoStream(fout, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
                
 
    //Read from the input file, then encrypt and write to the output file.
    while(rdlen < totlen)
    {
     len = fin.Read(bin, 0, 100);
     encStream.Write(bin, 0, len);
     rdlen = rdlen + len;    
    }
 
    encStream.Close(); 
    fout.Close();
    fin.Close();    

   }
   catch(System.Exception error)
   {
    this.noteMessage=error.Message.ToString();
   }
  }
  #endregion

  #region MD5
  /**////
  /// MD5 Encrypt
  ///
  /// text
  /// md5 Encrypt string
  public void MD5Encrypt()
  {
   MD5 md5 = new MD5CryptoServiceProvider();
   byte[] result = md5.ComputeHash(System.Text.Encoding.Default.GetBytes(this.inputString));  
   this.outString=System.Text.Encoding.Default.GetString(result);
  }

  #endregion

 

 }
}

posted @ 2007-07-18 00:31  Candyxiaoqiang  阅读(204)  评论(0)    收藏  举报