加密解密类

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace MyTest
{
 
/// <summary>
 
/// 加密和解密
 
/// </summary>

 public class EncryptDecrypt
 
{
  
public EncryptDecrypt(){}
  
//默认密钥向量
  public byte[] Keys = {0x120x340x560x780x900xAB0xCD0xEF};
  
/// <summary>
  
/// 利用MD5对字符串进行加密
  
/// </summary>
  
/// <param name="encryptString">待加密的字符串</param>
  
/// <returns>返回加密后的字符串</returns>

  public string EncryptMD5(string encryptString)
  
{
   MD5CryptoServiceProvider md5Hasher 
= new MD5CryptoServiceProvider();
   UTF8Encoding Encode 
= new UTF8Encoding();
   
byte[] HashedBytes = md5Hasher.ComputeHash(Encode.GetBytes(encryptString));
   
return Encode.GetString(HashedBytes);
  }

  
/// <summary>
  
/// DES加密字符串
  
/// </summary>
  
/// <param name="encryptString">待加密的字符串</param>
  
/// <param name="encryptKey">加密密钥,要求为8位</param>
  
/// <returns>加密成功返回加密后的字符串,失败返回源串</returns>

  public string EncryptDES(string encryptString,string encryptKey)
  
{
   
try
   
{
    
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
    
byte[] rgbIV = Keys;
    
byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
    DESCryptoServiceProvider dCSP 
= new DESCryptoServiceProvider();
    MemoryStream mStream 
= new MemoryStream();
    CryptoStream cStream 
= new CryptoStream(mStream,dCSP.CreateEncryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
    cStream.Write(inputByteArray,
0,inputByteArray.Length);
    cStream.FlushFinalBlock();
    
return Convert.ToBase64String(mStream.ToArray());
   }

   
catch
   
{
    
return encryptString;
   }

  }

  
/// <summary>
  
/// DES解密字符串
  
/// </summary>
  
/// <param name="decryptString">待解密的字符串</param>
  
/// <param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>
  
/// <returns>解密成功返回解密后的字符串,失败返源串</returns>

  public string DecryptDES(string decryptString,string decryptKey)
  
{
   
try
   
{
    
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey);
    
byte[] rgbIV = Keys;
    
byte[] inputByteArray = Convert.FromBase64String(decryptString);
    DESCryptoServiceProvider DCSP 
= new DESCryptoServiceProvider();
    MemoryStream mStream 
= new MemoryStream();
    CryptoStream cStream 
= new CryptoStream(mStream,DCSP.CreateDecryptor(rgbKey,rgbIV),CryptoStreamMode.Write);
    cStream.Write(inputByteArray,
0,inputByteArray.Length);
    cStream.FlushFinalBlock();
    
return Encoding.UTF8.GetString(mStream.ToArray());
   }

   
catch
   
{
    
return decryptString;
   }

  }

  
/// <summary>
  
/// DES加密文件
  
/// </summary>
  
/// <param name="inFilePath">待加密文件</param>
  
/// <param name="outFilePath">加密后的文件</param>
  
/// <param name="encryptKey">加密密钥</param>
  
/// <returns></returns>

  public bool EncryptDES(string inFilePath,string outFilePath,string encryptKey)
  
{  
   
byte[] rgbIV= Keys;
   
try
   
{
    
byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0,8));
    
//读入的流
    FileStream inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
    
//待写的流
    FileStream outFs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
    outFs.SetLength(
0);
    
//创建一个变量来帮助读写
    byte[] byteIn  = new byte[100]; //临时存放读入的流
    long readLen  = 0;              //读入流的长度
    long totalLen = inFs.Length;    //总共读入流的长度
    int  everyLen;                  //每次读入流动长度
    
//读入InFs,加密后写入OutFs
    DES des = new DESCryptoServiceProvider();          
    CryptoStream encStream 
= new CryptoStream(outFs, des.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 
    
while(readLen < totalLen)
    
{
     everyLen 
= inFs.Read(byteIn, 0100);
     encStream.Write(byteIn, 
0, everyLen);
     readLen 
= readLen + everyLen; 
    }

    encStream.Close();  
    outFs.Close();
    inFs.Close();
    
return true;//加密成功
   }

   
catch
   
{
    
return false;//加密失败 
   }

  }

  
/// <summary>
  
/// DES解密文件
  
/// </summary>
  
/// <param name="inFilePath">待解密文件</param>
  
/// <param name="outFilePath">待加密文件</param>
  
/// <param name="decryptKey">解密密钥</param>
  
/// <returns></returns>

  public bool DecryptDES(string inFilePath,string outFilePath,string decryptKey)
  
{
   
byte[] rgbIV= Keys;
   
try
   
{
    
byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0,8));
    
//读入的流
    FileStream inFs = new FileStream(inFilePath, FileMode.Open, FileAccess.Read);
    
//待写的流
    FileStream outFs = new FileStream(outFilePath, FileMode.OpenOrCreate, FileAccess.Write);
    outFs.SetLength(
0);
    
//创建一个变量来帮助读写
    byte[] byteIn  = new byte[100]; //临时存放读入的流
    long readLen  = 0;              //读入流的长度
    long totalLen = inFs.Length;    //总共读入流的长度
    int  everyLen;                  //每次读入流动长度
    
//读入InFs,解密后写入OutFs
    DES des = new DESCryptoServiceProvider();          
    CryptoStream encStream 
= new CryptoStream(outFs, des.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write); 
    
while(readLen < totalLen)
    
{
     everyLen 
= inFs.Read(byteIn, 0100);
     encStream.Write(byteIn, 
0, everyLen);
     readLen 
= readLen + everyLen; 
    }

    encStream.Close();  
    outFs.Close();
    inFs.Close();
    
return true;//解密成功
   }

   
catch
   
{
    
return false;//解密失败 
   }

  }

 }

}

posted on 2006-10-28 09:57  散步的蠕虫  阅读(297)  评论(0编辑  收藏  举报

导航