/**//// <summary> /// DES /// </summary> public class DES_ { private DES mydes; public string Key; public string IV; /**//// <summary> /// 对称加密类的构造函数 /// </summary> public DES_(string key) { mydes = new DESCryptoServiceProvider(); Key = key; IV = "728#$$%^TyguyshdsufhsfwofnhKJHJKHIYhfiusf98*(^%$^&&(*&()$##@%%$RHGJJHHJ"; } /**//// <summary> /// 对称加密类的构造函数 /// </summary> public DES_(string key, string iv) { mydes = new DESCryptoServiceProvider(); Key = key; IV = iv; } /**//// <summary> /// 获得密钥 /// </summary> /// <returns>密钥</returns> private byte[] GetLegalKey() { string sTemp = Key; mydes.GenerateKey(); byte[] bytTemp = mydes.Key; int KeyLength = bytTemp.Length; if (sTemp.Length > KeyLength) sTemp = sTemp.Substring(0, KeyLength); else if (sTemp.Length < KeyLength) sTemp = sTemp.PadRight(KeyLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /**//// <summary> /// 获得初始向量IV /// </summary> /// <returns>初试向量IV</returns> private byte[] GetLegalIV() { string sTemp = IV; mydes.GenerateIV(); byte[] bytTemp = mydes.IV; int IVLength = bytTemp.Length; if (sTemp.Length > IVLength) sTemp = sTemp.Substring(0, IVLength); else if (sTemp.Length < IVLength) sTemp = sTemp.PadRight(IVLength, ' '); return ASCIIEncoding.ASCII.GetBytes(sTemp); } /**//// <summary> /// 加密方法 /// </summary> /// <param name="Source">待加密的串</param> /// <returns>经过加密的串</returns> public string Encrypt(string Source) { try { byte[] bytIn = UTF8Encoding.UTF8.GetBytes(Source); MemoryStream ms = new MemoryStream(); mydes.Key = GetLegalKey(); mydes.IV = GetLegalIV(); ICryptoTransform encrypto = mydes.CreateEncryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); cs.Write(bytIn, 0, bytIn.Length); cs.FlushFinalBlock(); ms.Close(); byte[] bytOut = ms.ToArray(); return Convert.ToBase64String(bytOut); } catch (Exception ex) { throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message); } } /**//// <summary> /// 解密方法 /// </summary> /// <param name="Source">待解密的串</param> /// <returns>经过解密的串</returns> public string Decrypt(string Source) { try { byte[] bytIn = Convert.FromBase64String(Source); MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); mydes.Key = GetLegalKey(); mydes.IV = GetLegalIV(); ICryptoTransform encrypto = mydes.CreateDecryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); StreamReader sr = new StreamReader(cs); return sr.ReadToEnd(); } catch (Exception ex) { throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message); } } /**//// <summary> /// 加密方法byte[] to byte[] /// </summary> /// <param name="Source">待加密的byte数组</param> /// <returns>经过加密的byte数组</returns> public byte[] Encrypt(byte[] Source) { try { byte[] bytIn = Source; MemoryStream ms = new MemoryStream(); mydes.Key = GetLegalKey(); mydes.IV = GetLegalIV(); ICryptoTransform encrypto = mydes.CreateEncryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Write); cs.Write(bytIn, 0, bytIn.Length); cs.FlushFinalBlock(); ms.Close(); byte[] bytOut = ms.ToArray(); return bytOut; } catch (Exception ex) { throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message); } } /**//// <summary> /// 解密方法byte[] to byte[] /// </summary> /// <param name="Source">待解密的byte数组</param> /// <returns>经过解密的byte数组</returns> public byte[] Decrypt(byte[] Source) { try { byte[] bytIn = Source; MemoryStream ms = new MemoryStream(bytIn, 0, bytIn.Length); mydes.Key = GetLegalKey(); mydes.IV = GetLegalIV(); ICryptoTransform encrypto = mydes.CreateDecryptor(); CryptoStream cs = new CryptoStream(ms, encrypto, CryptoStreamMode.Read); StreamReader sr = new StreamReader(cs); return UTF8Encoding.UTF8.GetBytes(sr.ReadToEnd()); } catch (Exception ex) { throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message); } } /**//// <summary> /// 加密方法File to File /// </summary> /// <param name="inFileName">待加密文件的路径</param> /// <param name="outFileName">待加密后文件的输出路径</param> public void Encrypt(string inFileName, string outFileName) { try { FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read); FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write); fout.SetLength(0); mydes.Key = GetLegalKey(); mydes.IV = GetLegalIV(); byte[] bin = new byte[100]; long rdlen = 0; long totlen = fin.Length; int len; ICryptoTransform encrypto = mydes.CreateEncryptor(); CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write); while (rdlen < totlen) { len = fin.Read(bin, 0, 100); cs.Write(bin, 0, len); rdlen = rdlen + len; } cs.Close(); fout.Close(); fin.Close(); } catch (Exception ex) { throw new Exception("在文件加密的时候出现错误!错误提示: " + ex.Message); } } /**//// <summary> /// 解密方法File to File /// </summary> /// <param name="inFileName">待解密文件的路径</param> /// <param name="outFileName">待解密后文件的输出路径</param> public void Decrypt(string inFileName, string outFileName) { try { FileStream fin = new FileStream(inFileName, FileMode.Open, FileAccess.Read); FileStream fout = new FileStream(outFileName, FileMode.OpenOrCreate, FileAccess.Write); fout.SetLength(0); byte[] bin = new byte[100]; long rdlen = 0; long totlen = fin.Length; int len; mydes.Key = GetLegalKey(); mydes.IV = GetLegalIV(); ICryptoTransform encrypto = mydes.CreateDecryptor(); CryptoStream cs = new CryptoStream(fout, encrypto, CryptoStreamMode.Write); while (rdlen < totlen) { len = fin.Read(bin, 0, 100); cs.Write(bin, 0, len); rdlen = rdlen + len; } cs.Close(); fout.Close(); fin.Close(); } catch (Exception ex) { throw new Exception("在文件解密的时候出现错误!错误提示: " + ex.Message); } } }