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 }