微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C#对字符和文件的加密解密类

转自: http://www.cnblogs.com/bluescreen/archive/2012/02/17/2355731.html 
public class strorfilepass    {
           /// <summary>
 /// 初始化安全类
 /// </summary>
         public strorfilepass()
         {
             ///密码
             key = "www.qhjsw.net";
         }
         private string key; //认密钥
 
         private byte[] sKey;
         private byte[] sIV;
 
         #region 加密字符串
         /// <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,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="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(),inputByteArray.Length);
             cs.FlushFinalBlock();
             StringBuilder ret = new StringBuilder();
             return System.Text.Encoding.Default.GetString(ms.ToArray());
         }
         #endregion
 
         #region 加密文件
         /// <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)
         {
             try
             {
                 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                 if (keyStr == "")
                     keyStr = key;
                 FileStream fs = File.OpenRead(filePath);
                 byte[] inputByteArray = new byte[fs.Length];
                 fs.Read(inputByteArray,(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,CryptoStreamMode.Write);
                 cs.Write(inputByteArray,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;
             }
             catch{
                 return false;
             }
         }
         #endregion
 
         #region 解密文件
         /// <summary>
 /// 解密文件
 /// </summary>
 /// <param name="filePath">输入文件路径</param>
 /// <param name="savePath">解密后输出文件路径</param>
 /// <param name="keyStr">密码,可以为""</param>
 /// <returns></returns>
         public bool DecryptFile(string filePath,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;
             }
             catch {
                 return false;
             }
         }
         #endregion
         # region 大文件加密
         /// <summary>
 /// 加密文件
 /// </summary>
 /// <param name="filePath">输入文件路径</param>
 /// <param name="savePath">加密后输出文件路径</param>
 /// <param name="keyStr">密码,可以为""</param>
 /// <returns></returns>
         public bool BEncryptFile(string filePath,string keyStr)
         {
             try
             {
                 DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                 if (keyStr == "")
                     keyStr = key;
                 FileStream fs = File.OpenRead(filePath);
                 byte[] inputByteArray = new byte[500];
                 long Myfilesize = fs.Length;
                 int Mycompletedsize = 0;
                 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;
                 FileStream ms = File.OpenWrite(savePath);
                 CryptoStream cs = new CryptoStream(ms,CryptoStreamMode.Write);
                 while (Mycompletedsize < Myfilesize)
                 {
                     int length = fs.Read(inputByteArray,500);
                     cs.Write(inputByteArray,length);
                     Mycompletedsize += length;
                 }
                 cs.FlushFinalBlock();
                 fs.Close();
                 fs.dispose();
                 cs.Close();
                 cs.dispose();
                 ms.Close();
                 ms.dispose();
                 return true;
             }
             catch
             {
                 return false;
             }
         }
 
 
         /// <summary>
 /// 解密文件
 /// </summary>
 /// <param name="filePath">输入文件路径</param>
 /// <param name="savePath">解密后输出文件路径</param>
 /// <param name="keyStr">密码,可以为""</param>
 /// <returns></returns>
         public bool BDecryptFile(string filePath,length);
                     Mycompletedsize += length;
                 }
                 cs.FlushFinalBlock();
 
                 fs.Close();
                 fs.dispose();
                 cs.Close();
                 cs.dispose();
                 ms.Close();
                 ms.dispose();
 
                 return true;
             }
             catch
             {
                 return false;
             }
         }
         #endregion
     }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐