加密解密类

using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace MyTest
{
 /// <summary>
 /// 加密和解密
 /// </summary>
 public class EncryptDecrypt
 {
  public EncryptDecrypt(){}
  //默认密钥向量
  public byte[] Keys = {0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF};
  /// <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, 0, 100);
     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, 0, 100);
     encStream.Write(byteIn, 0, everyLen);
     readLen = readLen + everyLen;
    }
    encStream.Close(); 
    outFs.Close();
    inFs.Close();
    return true;//解密成功
   }
   catch
   {
    return false;//解密失败
   }
  }
 }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值