我的字符和文件加密类,128位加密

类别:.NET开发 点击:0 评论:0 推荐:

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

namespace MySecurity
{
public class MySecurity
 {
  public MySecurity()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }
  private string key="1234567890"; //默认密钥

  private byte[] sKey;
  private byte[] sIV;

  /// <summary>
  /// 加密字符串
  /// </summary>
  /// <param name="inputStr">输入字符串</param>
  /// <param name="keyStr">密码,可以为“”</param>
  /// <returns>输出加密后字符串</returns>
  static public string SEncryptString(string inputStr,string keyStr)
  {
       MySecurity ws=new MySecurity();
       return ws.EncryptString(inputStr,keyStr);
  }

  /// <summary>
  /// 加密字符串
  /// </summary>
  /// <param name="inputStr">输入字符串</param>
  /// <param name="keyStr">密码,可以为“”</param>
  /// <returns>输出加密后字符串</returns>
  public string EncryptString(string inputStr,string keyStr)
  {
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();
       if(keyStr=="")
            keyStr=key;
       byte[] inputByteArray = Encoding.Default.GetBytes(inputStr);
       byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
       SHA1 ha=new SHA1Managed();
       byte[] hb=ha.ComputeHash(keyByteArray);
       sKey=new byte[8];
       sIV=new byte[8];
       for(int i=0;i<8;i++)
            sKey[i]=hb[i];
       for(int i=8;i<16;i++)
            sIV[i-8]=hb[i];
       des.Key=sKey;
       des.IV=sIV;
       MemoryStream ms = new MemoryStream();
       CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write); 
       cs.Write(inputByteArray, 0, inputByteArray.Length); 
       cs.FlushFinalBlock(); 
       StringBuilder ret = new  StringBuilder(); 
       foreach(byte b in ms.ToArray()) 
       { 
            ret.AppendFormat("{0:X2}", b); 
       } 
       cs.Close();
       ms.Close();
       return  ret.ToString(); 
  }

  /// <summary>
  /// 加密文件
  /// </summary>
  /// <param name="filePath">输入文件路径</param>
 /// <param name="savePath">加密后输出文件路径</param>
  /// <param name="keyStr">密码,可以为“”</param>
  /// <returns></returns>  
public bool EncryptFile(string filePath,string savePath,string keyStr)
  {
       DESCryptoServiceProvider des = new DESCryptoServiceProvider(); 
       if(keyStr=="")
            keyStr=key;
       FileStream fs=File.OpenRead(filePath);
       byte[] inputByteArray =new byte[fs.Length];
       fs.Read(inputByteArray,0,(int)fs.Length);
       fs.Close();
       byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
       SHA1 ha=new SHA1Managed();
       byte[] hb=ha.ComputeHash(keyByteArray);
       sKey=new byte[8];
       sIV=new byte[8];
       for(int i=0;i<8;i++)
            sKey[i]=hb[i];
       for(int i=8;i<16;i++)
            sIV[i-8]=hb[i];
       des.Key=sKey;
       des.IV=sIV;
       MemoryStream ms = new MemoryStream();
       CryptoStream cs = new CryptoStream(ms,des.CreateEncryptor(),CryptoStreamMode.Write); 
       cs.Write(inputByteArray, 0, inputByteArray.Length); 
       cs.FlushFinalBlock();
       fs=File.OpenWrite(savePath);
       foreach(byte b in ms.ToArray()) 
       { 
            fs.WriteByte(b); 
       } 
       fs.Close();
       cs.Close();
       ms.Close();
       return true;
  }

  /// <summary>
  /// 解密字符串
  /// </summary>
  /// <param name="inputStr">要解密的字符串</param>
  /// <param name="keyStr">密钥</param>
  /// <returns>解密后的结果</returns>
  public string DecryptString(string inputStr,string keyStr)
  {
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();
       if(keyStr=="")
            keyStr=key;
       byte[] inputByteArray = new byte[inputStr.Length / 2]; 
       for(int x = 0; x < inputStr.Length / 2; x++) 
       { 
            int i = (Convert.ToInt32(inputStr.Substring(x * 2, 2), 16)); 
            inputByteArray[x]  =  (byte)i; 
       } 
       byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
       SHA1 ha=new SHA1Managed();
       byte[] hb=ha.ComputeHash(keyByteArray);
       sKey=new byte[8];
       sIV=new byte[8];
       for(int i=0;i<8;i++)
            sKey[i]=hb[i];
       for(int i=8;i<16;i++)
            sIV[i-8]=hb[i];
       des.Key=sKey;
       des.IV=sIV;
       MemoryStream ms = new MemoryStream();
       CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write); 
       cs.Write(inputByteArray, 0, inputByteArray.Length); 
       cs.FlushFinalBlock(); 
       StringBuilder ret = new StringBuilder(); 
       return System.Text.Encoding.Default.GetString(ms.ToArray()); 
  }

  /// <summary>
  /// 解密文件
  /// </summary>
  /// <param name="filePath">输入文件路径</param>
 /// <param name="savePath">解密后输出文件路径</param>
  /// <param name="keyStr">密码,可以为“”</param>
  /// <returns></returns>    
public bool DecryptFile(string filePath,string savePath,string keyStr)
  {
       DESCryptoServiceProvider des = new DESCryptoServiceProvider();
       if(keyStr=="")
            keyStr=key;
       FileStream fs=File.OpenRead(filePath);
       byte[] inputByteArray =new byte[fs.Length];
       fs.Read(inputByteArray,0,(int)fs.Length);
       fs.Close();
       byte[] keyByteArray=Encoding.Default.GetBytes(keyStr);
       SHA1 ha=new SHA1Managed();
       byte[] hb=ha.ComputeHash(keyByteArray);
       sKey=new byte[8];
       sIV=new byte[8];
       for(int i=0;i<8;i++)
            sKey[i]=hb[i];
       for(int i=8;i<16;i++)
            sIV[i-8]=hb[i];
       des.Key=sKey;
       des.IV=sIV;
       MemoryStream ms = new MemoryStream();
       CryptoStream cs = new CryptoStream(ms,des.CreateDecryptor(),CryptoStreamMode.Write); 
       cs.Write(inputByteArray, 0, inputByteArray.Length); 
       cs.FlushFinalBlock();
       fs=File.OpenWrite(savePath);
       foreach(byte b in ms.ToArray()) 
       { 
            fs.WriteByte(b); 
       }
       fs.Close();
       cs.Close();
       ms.Close();
       return true;
  }

  /// <summary>
  /// 解密字符串
  /// </summary>
  /// <param name="inputStr">要解密的字符串</param>
  /// <param name="keyStr">密钥</param>
  /// <returns>解密后的结果</returns>
  static public string SDecryptString(string inputStr,string keyStr)
  {
       MySecurity ws=new MySecurity();
       return ws.DecryptString(inputStr,keyStr);
  }
 }
}

本文地址:http://com.8s8s.com/it/it42958.htm