1
using System;2
using System.Collections.Generic;3
using System.Text;4
using System.Security.Cryptography;5
using System.IO;6
using System.Runtime.Serialization.Formatters.Binary;7
using System.Data;8
using System.Data.SqlClient;9

10
public class Tool11

{12
static string _EmailKey = "&MJEmail";13

14

/**//// <summary>15
/// 密钥16
/// </summary>17
public static string EmailKey18

{19

get
{ return Tool._EmailKey; }20
}21

22

/**//// <summary>23
/// 解密方法(前两位用*代替)24
/// </summary>25
/// <param name="pToDecrypt">待解密的字符</param>26
/// <param name="sKey">密钥</param>27
/// <returns>解密后的字符</returns>28
public static string DESDeCode(string pToDecrypt, string sKey)29

{30
try31

{32
if (string.IsNullOrEmpty(pToDecrypt))33
return null;34
DESCryptoServiceProvider des = new DESCryptoServiceProvider();35
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);36
des.Key = Encoding.ASCII.GetBytes(sKey);37
des.IV = Encoding.ASCII.GetBytes(sKey);38
MemoryStream ms = new MemoryStream();39
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);40
cs.Write(inputByteArray, 0, inputByteArray.Length);41
cs.FlushFinalBlock();42
StringBuilder ret = new StringBuilder();43
if (Encoding.UTF8.GetString(ms.ToArray()).Length >= 2)44

{45
string newstr = Encoding.Default.GetString(ms.ToArray());46
return "**" + newstr.Substring(2);47
}48

else
{ return "**"; }49
}50
catch51

{52
if (pToDecrypt.Length >= 2)53

{54
return "**" + pToDecrypt.Substring(2);55
}56
else57
return "**";58
}59
}60

61

/**//// <summary>62
/// 加密方法63
/// </summary>64
/// <param name="pToEncrypt">待加密字符</param>65
/// <param name="sKey">密钥</param>66
/// <returns>加密后的字符</returns>67
public static string DESEnCode(string pToEncrypt, string sKey)68

{69
if (string.IsNullOrEmpty(pToEncrypt))70
return null;71
pToEncrypt = pToEncrypt.ToLower();72
DESCryptoServiceProvider des = new DESCryptoServiceProvider();73
byte[] inputByteArray = Encoding.UTF8.GetBytes(pToEncrypt);74
des.Key = Encoding.ASCII.GetBytes(sKey);75
des.IV = Encoding.ASCII.GetBytes(sKey);76
MemoryStream ms = new MemoryStream();77
CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);78
cs.Write(inputByteArray, 0, inputByteArray.Length);79
cs.FlushFinalBlock();80
return Convert.ToBase64String(ms.ToArray());81
}82

83

84

85

/**//// <summary>86
/// 解密datatable中的指定列数据,并将这些列的前两位字母换成**87
/// </summary>88
/// <param name="cnames">要解密的列题标</param>89
/// <param name="dt">待处理的datable</param>90
public static DataTable DESDeDataTble(IList<string> cnames, DataTable dt)91

{92
if (dt == null || dt.Rows.Count == 0 || cnames == null || cnames.Count == 0)93
return dt;94
for (int i = 0; i < dt.Rows.Count; i++)95

{96
for (int j = 0; j < cnames.Count; j++)97

{98
if (dt.Columns.Contains(cnames[j].Trim()) && !string.IsNullOrEmpty(dt.Rows[i][cnames[j].Trim()].ToString()))99

{100
string str = dt.Rows[i][cnames[j].Trim()].ToString();101
if (!string.IsNullOrEmpty(str))102

{103
string newstr = DESDeCode(str, EmailKey);//解密104
dt.Rows[i][cnames[j]] = newstr;105
}106

107
}108
}109
}110
return dt;111
}112

113

114

/**//// <summary>115
/// 解密dataset中的datable的指定列数据,并将这些列的前两位字母换成**116
/// </summary>117
/// <param name="cnames">要解密的列标题</param>118
/// <param name="ds">待处理的dataset</param>119
/// <returns>处理后的dataset</returns>120
public static DataSet DESDeDataSet(IList<string> cnames, DataSet ds)121

{122
if (ds == null || ds.Tables.Count == 0 || cnames == null || cnames.Count == 0)123
return ds;124
DataSet newds = new DataSet();125
for (int i = 0; i < ds.Tables.Count; i++)126

{127
DataTable dt = ds.Tables[i];128
DataTable newdt = Tool.DESDeDataTble(cnames, dt);129
newds.Merge(newdt);130
}131
return newds;132
}133

134

/**//// <summary>135
/// 解密方法136
/// </summary>137
/// <param name="pToEncrypt">需要解密的字符</param>138
/// <param name="sKey">密钥</param>139
/// <returns>解密后的字符</returns>140
public static string DESDeString(string pToDecrypt, string sKey)141

{142
if (string.IsNullOrEmpty(pToDecrypt))143
return null;144
try145

{146
DESCryptoServiceProvider des = new DESCryptoServiceProvider();147
byte[] inputByteArray = Convert.FromBase64String(pToDecrypt);148
des.Key = Encoding.ASCII.GetBytes(sKey);149
des.IV = Encoding.ASCII.GetBytes(sKey);150
MemoryStream ms = new MemoryStream();151
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);152
cs.Write(inputByteArray, 0, inputByteArray.Length);153
cs.FlushFinalBlock();154
return Encoding.UTF8.GetString(ms.ToArray());155
}156
catch157

{158
return pToDecrypt;159
}160
}161

162

163

164

/**//// <summary>165
/// 解密datatable中的指定列数据166
/// </summary>167
/// <param name="cnames">要解密的列题标</param>168
/// <param name="dt">待处理的datable</param>169
public static DataTable DESDeDataTbleCRM(IList<string> cnames, DataTable dt)170

{171
if (dt == null || dt.Rows.Count == 0 || cnames == null || cnames.Count == 0)172
return dt;173

174
for (int i = 0; i < dt.Rows.Count; i++)175

{176
for (int j = 0; j < cnames.Count; j++)177

{178
if (dt.Columns.Contains(cnames[j].Trim()) && !string.IsNullOrEmpty(dt.Rows[i][cnames[j].Trim()].ToString()))179

{180
string str = dt.Rows[i][cnames[j].Trim()].ToString();181
if (!string.IsNullOrEmpty(str))182

{183
try184

{185
string newstr = Tool.DESDeString(str, EmailKey);//解密186
dt.Rows[i][cnames[j]] = newstr;187
}188
catch189

{190
continue;191
}192
}193
}194
}195
}196
return dt;197
}198

199

200

201

202

203

/**//// <summary>204
/// 解密dataset中的datable的指定列数据205
/// </summary>206
/// <param name="cnames">要解密的列标题</param>207
/// <param name="ds">待处理的dataset</param>208
/// <returns>处理后的dataset</returns>209
public static DataSet DESDeDataSetCRM(IList<string> cnames, DataSet ds)210

{211
if (ds == null || ds.Tables.Count == 0 || cnames == null || cnames.Count == 0)212
return ds;213
DataSet newds = new DataSet();214
for (int i = 0; i < ds.Tables.Count; i++)215

{216
DataTable dt = ds.Tables[i];217
DataTable newdt = Tool.DESDeDataTbleCRM(cnames, dt);218
newds.Merge(newdt);219
}220
return newds;221
}222

/**//// <summary>223
/// md5加密224
/// </summary>225
/// <param name="value"></param>226
/// <param name="key"></param>227
/// <returns></returns>228
public static string EncodePassword(string value, string key)229

{230
byte[] hashbyte = new MD5CryptoServiceProvider().ComputeHash(Encoding.ASCII.GetBytes(key + value));231
string newstr = "";232
for (int i = 0; i < hashbyte.Length; i++)233
newstr += hashbyte[i].ToString("X").PadLeft(2, '0');234
return newstr.ToLower();235
}236

237
}
浙公网安备 33010602011771号