您的位置:首页 > 其它

DotNet中用到的加密算法总结

2007-04-01 21:45 447 查看
1

public class CryptUtil
2





{
3

public static string DecryptString(string input)
4





{
5

if (input.Equals(string.Empty))
6





{
7

return input;
8

}
9


10



byte[] byKey =

{0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E};
11



byte[] IV =

{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
12

byte[] inputByteArray = new Byte[input.Length];
13

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
14

inputByteArray = Convert.FromBase64String(input);
15

MemoryStream ms = new MemoryStream();
16

CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
17

cs.Write(inputByteArray, 0, inputByteArray.Length);
18

cs.FlushFinalBlock();
19

Encoding encoding = new UTF8Encoding();
20

return encoding.GetString(ms.ToArray());
21

}
22


23

public static string EncryptString(string input)
24





{
25

if (input.Equals(string.Empty))
26





{
27

return input;
28

}
29


30



byte[] byKey =

{0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E};
31



byte[] IV =

{0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
32

DESCryptoServiceProvider des = new DESCryptoServiceProvider();
33

byte[] inputByteArray = Encoding.UTF8.GetBytes(input);
34

MemoryStream ms = new MemoryStream();
35

CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
36

cs.Write(inputByteArray, 0, inputByteArray.Length);
37

cs.FlushFinalBlock();
38

return Convert.ToBase64String(ms.ToArray());
39

}
40



/**//// <summary>
41

/// DES + Base64 加密
42

/// </summary>
43

/// <param name="input">明文字符串</param>
44

/// <returns>已加密字符串</returns>
45

public static string DesBase64Encrypt(string input)
46





{
47

System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
48

des.Mode = System.Security.Cryptography.CipherMode.ECB;
49

ICryptoTransform ct;
50

MemoryStream ms;
51

CryptoStream cs;
52

byte[] byt;
53



byte[] Key = new byte[8]

{56,50,55,56,56,55,49,49};
54



byte[] IV = new byte[8]

{0,0,0,0,0,0,0,0};
55


56

ct = des.CreateEncryptor(Key, IV);
57


58

byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
59


60

ms = new MemoryStream();
61

cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
62

cs.Write(byt, 0, byt.Length);
63

cs.FlushFinalBlock();
64


65

cs.Close();
66


67

byte[] answer = ms.ToArray();
68

for(int j=0;j<answer.Length;j++)
69





{
70

Console.Write(answer[j].ToString()+ " ");
71

}
72

Console.WriteLine();
73

return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
74

}
75


76



/**//// <summary>
77

/// DES + Base64 解密
78

/// </summary>
79

/// <param name="input">密文字符串</param>
80

/// <returns>解密字符串</returns>
81

public static string DesBase64Decrypt(string input)
82





{
83

System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
84

des.Mode = System.Security.Cryptography.CipherMode.ECB;
85

ICryptoTransform ct;
86

MemoryStream ms;
87

CryptoStream cs;
88

byte[] byt;
89



byte[] Key = new byte[8]

{56,50,55,56,56,55,49,49};
90



byte[] IV = new byte[8]

{0,0,0,0,0,0,0,0};
91


92

ct = des.CreateDecryptor(Key, IV);
93

byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组
94


95

ms = new MemoryStream();
96

cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
97

cs.Write(byt, 0, byt.Length);
98

cs.FlushFinalBlock();
99


100

cs.Close();
101


102

return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
103

}
104


105


106


107



/**//// <summary>
108

/// DES + Base64 加密
109

/// </summary>
110

/// <param name="input">明文字符串</param>
111

/// <returns>已加密字符串</returns>
112

public static string DesBase64EncryptForID5(string input)
113





{
114

System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
115

des.Mode = System.Security.Cryptography.CipherMode.CBC;
116

ICryptoTransform ct;
117

MemoryStream ms;
118

CryptoStream cs;
119

byte[] byt;
120



byte[] Key = new byte[8]

{56,50,55,56,56,55,49,49};
121



byte[] IV = new byte[8]

{56,50,55,56,56,55,49,49};
122


123

ct = des.CreateEncryptor(Key, IV);
124


125

byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
126


127

ms = new MemoryStream();
128

cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
129

cs.Write(byt, 0, byt.Length);
130

cs.FlushFinalBlock();
131


132

cs.Close();
133


134

byte[] answer = ms.ToArray();
135

for(int j=0;j<answer.Length;j++)
136





{
137

Console.Write(answer[j].ToString()+ " ");
138

}
139

Console.WriteLine();
140

return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
141

}
142


143


144



/**//// <summary>
145

/// DES + Base64 解密
146

/// </summary>
147

/// <param name="input">密文字符串</param>
148

/// <returns>解密字符串</returns>
149

public static string DesBase64DecryptForID5(string input)
150





{
151

System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
152

des.Mode = System.Security.Cryptography.CipherMode.CBC;
153

ICryptoTransform ct;
154

MemoryStream ms;
155

CryptoStream cs;
156

byte[] byt;
157



byte[] Key = new byte[8]

{56,50,55,56,56,55,49,49};
158



byte[] IV = new byte[8]

{56,50,55,56,56,55,49,49};
159


160

ct = des.CreateDecryptor(Key, IV);
161

byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组
162


163

ms = new MemoryStream();
164

cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
165

cs.Write(byt, 0, byt.Length);
166

cs.FlushFinalBlock();
167


168

cs.Close();
169


170

return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
171

}
172


173


174



/**//// <summary>
175

/// 3DES 加密 Byte[] to HEX string
176

/// </summary>
177

/// <param name="input">明文字符串</param>
178

/// <returns>已加密字符串</returns>
179

public static string ThreeDesEncryptHEX(string input)
180





{
181

string result = "";
182

System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
183

des.Mode = System.Security.Cryptography.CipherMode.CBC;
184

des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
185

ICryptoTransform ct;
186

MemoryStream ms;
187

CryptoStream cs;
188

byte[] byt;
189



byte[] Key = new byte[24]

{
190

1,2,3,4,5,6,
191

1,2,3,4,5,6,
192

1,2,3,4,5,6,
193

1,2,3,4,5,6
194

};
195



byte[] IV = new byte[8]

{1,2,3,4,5,6,1,2};
196


197

ct = des.CreateEncryptor(Key, IV);
198


199

byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
200


201

ms = new MemoryStream();
202

cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
203

cs.Write(byt, 0, byt.Length);
204

cs.FlushFinalBlock();
205


206

cs.Close();
207


208

byte[] answer = ms.ToArray();
209

for(int j=0;j<answer.Length;j++)
210





{
211

result += answer[j].ToString("x").PadLeft(2,'0');
212

}
213

return result;
214

}
215


216



/**//// <summary>
217

/// 3DES + HEX to byte[] 解密
218

/// </summary>
219

/// <param name="input">密文字符串</param>
220

/// <returns>解密字符串</returns>
221

public static string ThreeDesDecryptHEX(string input)
222





{
223

System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
224

des.Mode = System.Security.Cryptography.CipherMode.CBC;
225

des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
226

ICryptoTransform ct;
227

MemoryStream ms;
228

CryptoStream cs;
229



byte[] Key = new byte[24]

{
230

1,2,3,4,5,6,
231

1,2,3,4,5,6,
232

1,2,3,4,5,6,
233

1,2,3,4,5,6
234

};
235



byte[] IV = new byte[8]

{1,2,3,4,5,6,1,2};
236


237

ct = des.CreateDecryptor(Key, IV);
238

//byt = Convert.FromBase64String(input); // 将 密文 以 HEX to byte[]编码转换成 byte 数组
239

if(input.Length<=1)
240





{
241

throw new Exception("encrypted HEX string is too short!");
242

}
243

byte[] byt = new byte[input.Length/2];
244

for(int i=0;i<byt.Length;i++)
245





{
246

//Console.WriteLine(input.Substring(i*2,2));
247

byt[i] = Convert.ToByte(input.Substring(i*2,2),16);
248

}
249


250

ms = new MemoryStream();
251

cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
252

cs.Write(byt, 0, byt.Length);
253

cs.FlushFinalBlock();
254


255

cs.Close();
256


257

return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
258

}
259



/**//// <summary>
260

/// Base64解码
261

/// </summary>
262

/// <param name="base64Str"></param>
263

/// <returns></returns>
264

public static string DecodingFromBase64(string base64Str)
265





{
266

Byte[] bytes = Convert.FromBase64String(base64Str);
267

return System.Text.Encoding.UTF8.GetString(bytes);
268

}
269



/**//// <summary>
270

/// Base64编码
271

/// </summary>
272

/// <param name="str"></param>
273

/// <returns></returns>
274

public static string EncodingToBase64(string str)
275





{
276

return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
277

}
278



/**//// <summary>
279

/// 根据指定的编码方式Base64解码
280

/// </summary>
281

/// <param name="base64Str"></param>
282

/// <param name="strEncoding"></param>
283

/// <returns></returns>
284

public static string DecodingFromBase64(string base64Str,System.Text.Encoding strEncoding)
285





{
286

Byte[] bytes = Convert.FromBase64String(base64Str);
287

return strEncoding.GetString(bytes);
288

}
289



/**//// <summary>
290

/// 根据指定的编码方式Base64编码
291

/// </summary>
292

/// <param name="str"></param>
293

/// <param name="strEncoding"></param>
294

/// <returns></returns>
295

public static string EncodingToBase64(string str,System.Text.Encoding strEncoding)
296





{
297

return Convert.ToBase64String(strEncoding.GetBytes(str));
298

}
299

}

两个常用的方法

1



/**//// <summary>
2

/// 通过字节数组形式的密钥获取字符串形式的密钥
3

/// </summary>
4

void GetStringByByteArray()
5





{
6



byte[] Key = new byte[8]

{56,50,55,56,56,55,49,49};
7

Response.Write(System.Text.Encoding.Default.GetString(Key));
8

Response.End();
9

}
10


11



/**//// <summary>
12

/// 通过字符串形式的密钥获取字节数组形式的密钥
13

/// </summary>
14

void GetByteArrayByString()
15





{
16

string key = "82788711";
17

Response.Write(System.Text.Encoding.Default.GetBytes(key));
18

Response.End();
19


20

}

有这里没包括的,欢迎回复,大家一起总结一下~~



http://www.cnblogs.com/goody9807/archive/2007/01/23/627785.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: