1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Security.Cryptography; 6 using System.IO; 7 8 namespace 加密解密 9 { 10 11 public sealed class EncryptUtils 12 { 13 #region Base64加密解密 14 /// <summary> 15 /// Base64加密 16 /// </summary> 17 /// <param name="input">需要加密的字符串</param> 18 /// <returns></returns> 19 public static string Base64Encrypt(string input) 20 { 21 return Base64Encrypt(input, new UTF8Encoding()); 22 } 23 24 /// <summary> 25 /// Base64加密 26 /// </summary> 27 /// <param name="input">需要加密的字符串</param> 28 /// <param name="encode">字符编码</param> 29 /// <returns></returns> 30 public static string Base64Encrypt(string input, Encoding encode) 31 { 32 return Convert.ToBase64String(encode.GetBytes(input)); 33 } 34 35 /// <summary> 36 /// Base64解密 37 /// </summary> 38 /// <param name="input">需要解密的字符串</param> 39 /// <returns></returns> 40 public static string Base64Decrypt(string input) 41 { 42 return Base64Decrypt(input, new UTF8Encoding()); 43 } 44 45 /// <summary> 46 /// Base64解密 47 /// </summary> 48 /// <param name="input">需要解密的字符串</param> 49 /// <param name="encode">字符的编码</param> 50 /// <returns></returns> 51 public static string Base64Decrypt(string input, Encoding encode) 52 { 53 return encode.GetString(Convert.FromBase64String(input)); 54 } 55 #endregion 56 57 #region DES加密解密 58 /// <summary> 59 /// DES加密 60 /// </summary> 61 /// <param name="data">加密数据</param> 62 /// <param name="key">8位字符的密钥字符串</param> 63 /// <param name="iv">8位字符的初始化向量字符串</param> 64 /// <returns></returns> 65 public static string DESEncrypt(string data, string key, string iv) 66 { 67 byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key); 68 byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv); 69 70 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 71 int i = cryptoProvider.KeySize; 72 MemoryStream ms = new MemoryStream(); 73 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateEncryptor(byKey, byIV), CryptoStreamMode.Write); 74 75 StreamWriter sw = new StreamWriter(cst); 76 sw.Write(data); 77 sw.Flush(); 78 cst.FlushFinalBlock(); 79 sw.Flush(); 80 return Convert.ToBase64String(ms.GetBuffer(), 0, (int)ms.Length); 81 } 82 83 /// <summary> 84 /// DES解密 85 /// </summary> 86 /// <param name="data">解密数据</param> 87 /// <param name="key">8位字符的密钥字符串(需要和加密时相同)</param> 88 /// <param name="iv">8位字符的初始化向量字符串(需要和加密时相同)</param> 89 /// <returns></returns> 90 public static string DESDecrypt(string data, string key, string iv) 91 { 92 byte[] byKey = System.Text.ASCIIEncoding.ASCII.GetBytes(key); 93 byte[] byIV = System.Text.ASCIIEncoding.ASCII.GetBytes(iv); 94 95 byte[] byEnc; 96 try 97 { 98 byEnc = Convert.FromBase64String(data); 99 } 100 catch 101 { 102 return null; 103 } 104 105 DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider(); 106 MemoryStream ms = new MemoryStream(byEnc); 107 CryptoStream cst = new CryptoStream(ms, cryptoProvider.CreateDecryptor(byKey, byIV), CryptoStreamMode.Read); 108 StreamReader sr = new StreamReader(cst); 109 return sr.ReadToEnd(); 110 } 111 #endregion 112 113 #region MD5加密 114 /// <summary> 115 /// MD5加密 116 /// </summary> 117 /// <param name="input">需要加密的字符串</param> 118 /// <returns></returns> 119 public static string MD5Encrypt(string input) 120 { 121 return MD5Encrypt(input, new UTF8Encoding()); 122 } 123 124 /// <summary> 125 /// MD5加密 126 /// </summary> 127 /// <param name="input">需要加密的字符串</param> 128 /// <param name="encode">字符的编码</param> 129 /// <returns></returns> 130 public static string MD5Encrypt(string input, Encoding encode) 131 { 132 MD5 md5 = new MD5CryptoServiceProvider(); 133 byte[] t = md5.ComputeHash(encode.GetBytes(input)); 134 StringBuilder sb = new StringBuilder(32); 135 for (int i = 0; i < t.Length; i++) 136 sb.Append(t[i].ToString("x").PadLeft(2, '0')); 137 return sb.ToString(); 138 } 139 140 /// <summary> 141 /// MD5对文件流加密 142 /// </summary> 143 /// <param name="sr"></param> 144 /// <returns></returns> 145 public static string MD5Encrypt(Stream stream) 146 { 147 MD5 md5serv = MD5CryptoServiceProvider.Create(); 148 byte[] buffer = md5serv.ComputeHash(stream); 149 StringBuilder sb = new StringBuilder(); 150 foreach (byte var in buffer) 151 sb.Append(var.ToString("x2")); 152 return sb.ToString(); 153 } 154 155 /// <summary> 156 /// MD5加密(返回16位加密串) 157 /// </summary> 158 /// <param name="input"></param> 159 /// <param name="encode"></param> 160 /// <returns></returns> 161 public static string MD5Encrypt16(string input, Encoding encode) 162 { 163 MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider(); 164 string result = BitConverter.ToString(md5.ComputeHash(encode.GetBytes(input)), 4, 8); 165 result = result.Replace("-", ""); 166 return result; 167 } 168 #endregion 169 170 #region 3DES 加密解密 171 172 public static string DES3Encrypt(string data, string key) 173 { 174 TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider(); 175 176 DES.Key = ASCIIEncoding.ASCII.GetBytes(key); 177 DES.Mode = CipherMode.CBC; 178 DES.Padding = PaddingMode.PKCS7; 179 180 ICryptoTransform DESEncrypt = DES.CreateEncryptor(); 181 182 byte[] Buffer = ASCIIEncoding.ASCII.GetBytes(data); 183 return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length)); 184 } 185 186 public static string DES3Decrypt(string data, string key) 187 { 188 TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider(); 189 190 DES.Key = ASCIIEncoding.ASCII.GetBytes(key); 191 DES.Mode = CipherMode.CBC; 192 DES.Padding = System.Security.Cryptography.PaddingMode.PKCS7; 193 194 ICryptoTransform DESDecrypt = DES.CreateDecryptor(); 195 196 string result = ""; 197 try 198 { 199 byte[] Buffer = Convert.FromBase64String(data); 200 result = ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length)); 201 } 202 catch (Exception e) 203 { 204 205 } 206 return result; 207 } 208 209 #endregion 210 } 211 }