1
using System;
2
using System.IO;
3
using System.Security.Cryptography;
4
using System.Text;
5
6
namespace goody9807.Shared.Crypt
7
{
8
/// <summary>
9
/// Summary description for CryptUtil.
10
/// </summary>
11
public class CryptUtil
12
{
13
public static string DecryptString(string input)
14
{
15
if (input.Equals(string.Empty))
16
{
17
return input;
18
}
19
20
byte[] byKey = {0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E};
21
byte[] IV = {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
22
byte[] inputByteArray = new Byte[input.Length];
23
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
24
inputByteArray = Convert.FromBase64String(input);
25
MemoryStream ms = new MemoryStream();
26
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(byKey, IV), CryptoStreamMode.Write);
27
cs.Write(inputByteArray, 0, inputByteArray.Length);
28
cs.FlushFinalBlock();
29
Encoding encoding = new UTF8Encoding();
30
return encoding.GetString(ms.ToArray());
31
}
32
33
public static string EncryptString(string input)
34
{
35
if (input.Equals(string.Empty))
36
{
37
return input;
38
}
39
40
byte[] byKey = {0x63, 0x68, 0x65, 0x6E, 0x79, 0x75, 0x61, 0x6E};
41
byte[] IV = {0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10};
42
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
43
byte[] inputByteArray = Encoding.UTF8.GetBytes(input);
44
MemoryStream ms = new MemoryStream();
45
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(byKey, IV), CryptoStreamMode.Write);
46
cs.Write(inputByteArray, 0, inputByteArray.Length);
47
cs.FlushFinalBlock();
48
return Convert.ToBase64String(ms.ToArray());
49
}
50
/// <summary>
51
/// DES + Base64 加密
52
/// </summary>
53
/// <param name="input">明文字符串</param>
54
/// <returns>已加密字符串</returns>
55
public static string DesBase64Encrypt(string input)
56
{
57
System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
58
des.Mode = System.Security.Cryptography.CipherMode.ECB;
59
ICryptoTransform ct;
60
MemoryStream ms;
61
CryptoStream cs;
62
byte[] byt;
63
byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
64
byte[] IV = new byte[8]{0,0,0,0,0,0,0,0};
65
66
ct = des.CreateEncryptor(Key, IV);
67
68
byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
69
70
ms = new MemoryStream();
71
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
72
cs.Write(byt, 0, byt.Length);
73
cs.FlushFinalBlock();
74
75
cs.Close();
76
77
byte[] answer = ms.ToArray();
78
for(int j=0;j<answer.Length;j++)
79
{
80
Console.Write(answer[j].ToString()+ " ");
81
}
82
Console.WriteLine();
83
return Convert.ToBase64String(ms.ToArray()); // 将加密的 byte 数组依照 Base64 编码转换成字符串
84
}
85
86
/// <summary>
87
/// DES + Base64 解密
88
/// </summary>
89
/// <param name="input">密文字符串</param>
90
/// <returns>解密字符串</returns>
91
public static string DesBase64Decrypt(string input)
92
{
93
System.Security.Cryptography.DES des = System.Security.Cryptography.DES.Create();
94
des.Mode = System.Security.Cryptography.CipherMode.ECB;
95
ICryptoTransform ct;
96
MemoryStream ms;
97
CryptoStream cs;
98
byte[] byt;
99
byte[] Key = new byte[8]{56,50,55,56,56,55,49,49};
100
byte[] IV = new byte[8]{0,0,0,0,0,0,0,0};
101
102
ct = des.CreateDecryptor(Key, IV);
103
byt = Convert.FromBase64String(input); // 将 密文 以 Base64 编码转换成 byte 数组
104
105
ms = new MemoryStream();
106
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
107
cs.Write(byt, 0, byt.Length);
108
cs.FlushFinalBlock();
109
110
cs.Close();
111
112
return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
113
}
114
115
/// <summary>
116
/// 3DES 加密 Byte[] to HEX string
117
/// </summary>
118
/// <param name="input">明文字符串</param>
119
/// <returns>已加密字符串</returns>
120
public static string ThreeDesEncryptHEX(string input)
121
{
122
string result = "";
123
System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
124
des.Mode = System.Security.Cryptography.CipherMode.CBC;
125
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
126
ICryptoTransform ct;
127
MemoryStream ms;
128
CryptoStream cs;
129
byte[] byt;
130
byte[] Key = new byte[24]{
131
1,2,3,4,5,6,
132
1,2,3,4,5,6,
133
1,2,3,4,5,6,
134
1,2,3,4,5,6
135
};
136
byte[] IV = new byte[8]{1,2,3,4,5,6,1,2};
137
138
ct = des.CreateEncryptor(Key, IV);
139
140
byt = Encoding.GetEncoding("GB2312").GetBytes(input); //根据 GB2312 编码对字符串处理,转换成 byte 数组
141
142
ms = new MemoryStream();
143
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
144
cs.Write(byt, 0, byt.Length);
145
cs.FlushFinalBlock();
146
147
cs.Close();
148
149
byte[] answer = ms.ToArray();
150
for(int j=0;j<answer.Length;j++)
151
{
152
result += answer[j].ToString("x").PadLeft(2,'0');
153
}
154
return result;
155
}
156
157
/// <summary>
158
/// 3DES + HEX to byte[] 解密
159
/// </summary>
160
/// <param name="input">密文字符串</param>
161
/// <returns>解密字符串</returns>
162
public static string ThreeDesDecryptHEX(string input)
163
{
164
System.Security.Cryptography.TripleDES des = System.Security.Cryptography.TripleDES.Create();
165
des.Mode = System.Security.Cryptography.CipherMode.CBC;
166
des.Padding = System.Security.Cryptography.PaddingMode.PKCS7;
167
ICryptoTransform ct;
168
MemoryStream ms;
169
CryptoStream cs;
170
byte[] Key = new byte[24]
{
171
1,2,3,4,5,6,
172
1,2,3,4,5,6,
173
1,2,3,4,5,6,
174
1,2,3,4,5,6
175
};
176
byte[] IV = new byte[8]
{1,2,3,4,5,6,1,2};
177
178
ct = des.CreateDecryptor(Key, IV);
179
//byt = Convert.FromBase64String(input); // 将 密文 以 HEX to byte[]编码转换成 byte 数组
180
if(input.Length<=1)
181
{
182
throw new Exception("encrypted HEX string is too short!");
183
}
184
byte[] byt = new byte[input.Length/2];
185
for(int i=0;i<byt.Length;i++)
186
{
187
//Console.WriteLine(input.Substring(i*2,2));
188
byt[i] = Convert.ToByte(input.Substring(i*2,2),16);
189
}
190
191
ms = new MemoryStream();
192
cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);
193
cs.Write(byt, 0, byt.Length);
194
cs.FlushFinalBlock();
195
196
cs.Close();
197
198
return Encoding.GetEncoding("GB2312").GetString(ms.ToArray()); // 将 明文 以 GB2312 编码转换成字符串
199
}
200
/// <summary>
201
/// Base64解码
202
/// </summary>
203
/// <param name="base64Str"></param>
204
/// <returns></returns>
205
public static string DecodingFromBase64(string base64Str)
206
{
207
Byte[] bytes = Convert.FromBase64String(base64Str);
208
return System.Text.Encoding.UTF8.GetString(bytes);
209
}
210
/// <summary>
211
/// Base64编码
212
/// </summary>
213
/// <param name="str"></param>
214
/// <returns></returns>
215
public static string EncodingToBase64(string str)
216
{
217
return Convert.ToBase64String(Encoding.UTF8.GetBytes(str));
218
}
219
/// <summary>
220
/// 根据指定的编码方式Base64解码
221
/// </summary>
222
/// <param name="base64Str"></param>
223
/// <param name="strEncoding"></param>
224
/// <returns></returns>
225
public static string DecodingFromBase64(string base64Str,System.Text.Encoding strEncoding)
226
{
227
Byte[] bytes = Convert.FromBase64String(base64Str);
228
return strEncoding.GetString(bytes);
229
}
230
/// <summary>
231
/// 根据指定的编码方式Base64编码
232
/// </summary>
233
/// <param name="str"></param>
234
/// <param name="strEncoding"></param>
235
/// <returns></returns>
236
public static string EncodingToBase64(string str,System.Text.Encoding strEncoding)
237
{
238
return Convert.ToBase64String(strEncoding.GetBytes(str));
239
}
240
}
241
}

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170



171

172

173

174

175

176



177

178

179

180

181



182

183

184

185

186



187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

用3DES 加密时 需要注意Asp.net这边的模式需要用CBC模式
des.Mode = System.Security.Cryptography.CipherMode.CBC;