MiniDes.cs public class MiniDes ... { public MiniDes() ...{ // // TODO: Add constructor logic here // } private static string sKey ...{ get ...{ return Key.MiniDesKey; } } //矢量 private const string sIV = "qcDd6X+aPLa="; /**//// <summary> /// 3DES加密 /// </summary> /// <param name= "Value "> 待加密字符串 </param> /// <param name= "sKey "> 密钥 </param> /// <param name= "sIV "> 矢量 </param> /// <returns> 加密后字符串 </returns> public static string Encrypt(string Value) ...{ try ...{ //构造对称算法 SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; mCSP.Key = Convert.FromBase64String(sKey); mCSP.IV = Convert.FromBase64String(sIV); //指定加密的运算模式 mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; //获取或设置加密算法的填充模式 mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV); byt = Encoding.UTF8.GetBytes(Value); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return Convert.ToBase64String(ms.ToArray()); } catch ...{ return ""; } } /**//// <summary> /// 3DES解密 /// </summary> /// <param name= "Value "> 待解密字符串 </param> /// <param name= "sKey "> 密钥 </param> /// <param name= "sIV "> 矢量 </param> /// <returns> 解密后字符串 </returns> public static string Decrypt(string Value) ...{ try ...{ //构造对称算法 SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider(); ICryptoTransform ct; MemoryStream ms; CryptoStream cs; byte[] byt; mCSP.Key = Convert.FromBase64String(sKey); mCSP.IV = Convert.FromBase64String(sIV); mCSP.Mode = System.Security.Cryptography.CipherMode.ECB; mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV); byt = Convert.FromBase64String(Value); ms = new MemoryStream(); cs = new CryptoStream(ms, ct, CryptoStreamMode.Write); cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock(); cs.Close(); return Encoding.UTF8.GetString(ms.ToArray()); } catch ...{ return ""; } } } key.cs public class Key ... { public Key() ...{ // // TODO: Add constructor logic here // } //des密钥 32位 public static string MiniDesKey ...{ get ...{ return "qJzGEh6hESZDVgeCnFPGuxzaiB7NLQM2"; } } } CodeSign.cs public class CodeSign ... { public CodeSign() ...{ } //返回原加密字符串 public static string GetData(string signstr) ...{ try ...{ string _tempsignstr = signstr.Substring(signstr.IndexOf('A') + 1); int randomstrlen = int.Parse(signstr.Substring(signstr.IndexOf('A') + 1, signstr.IndexOf('B') - signstr.IndexOf('A') - 1)); string wholestr = signstr.Substring(signstr.IndexOf('B') + 1); string _temp1str = signstr.Substring(signstr.IndexOf('B') + 1, (wholestr.Length - randomstrlen) / 2); string _temp2str = signstr.Substring(signstr.IndexOf('B') + 1 + _temp1str.Length + randomstrlen); string _tempstr = _temp1str + _temp2str; string _temprandom = signstr.Substring(signstr.IndexOf('B') + 1 + _temp1str.Length, randomstrlen); byte[] byrandom = Convert.FromBase64String(_temprandom); for (int i = 0; i < byrandom.Length; i++) ...{ byrandom[i] = (byrandom[i] ^= (byte)10); } byte[] bystr = Convert.FromBase64String(_tempstr); for (int i = 0; i < bystr.Length; i++) ...{ bystr[i] = (bystr[i] ^= byrandom[i]); } string oldstr = Encoding.UTF8.GetString(bystr); return oldstr; } catch ...{ return ""; } } //签名 ascii(A后的数))+A+(随即数^10.length+B+str^随即数+随即数^10(插入在str^随即数/2处)) public static string AddSign(string str) ...{ try ...{ byte[] bystr = Encoding.UTF8.GetBytes(str); string randomstr = GetRandomStr(bystr.Length); byte[] byrandom = Encoding.UTF8.GetBytes(randomstr); for (int i = 0; i < bystr.Length; i++) ...{ bystr[i] = (bystr[i] ^= byrandom[i]); } string signstr = Convert.ToBase64String(bystr); for (int i = 0; i < byrandom.Length; i++) ...{ byrandom[i] = (byrandom[i] ^= (byte)10); } string _temprandom = Convert.ToBase64String(byrandom); string _temp1str = signstr.Substring(0, signstr.Length / 2); string _temp2str = signstr.Substring(signstr.Length / 2); signstr = _temprandom.Length + "B" + _temp1str + _temprandom + _temp2str; string _tempASCII = ToASCII(signstr); return _tempASCII + "A" + signstr; } catch ...{ return ""; } } //验签 public static bool CheckSign(string signstr) ...{ try ...{ if (!string.IsNullOrEmpty(signstr)) ...{ string _tempASCII = signstr.Substring(0, signstr.IndexOf('A')); string _tempsignstr = signstr.Substring(signstr.IndexOf('A') + 1); if (int.Parse(_tempASCII) == int.Parse(ToASCII(_tempsignstr))) ...{ return true; } } } catch ...{ return false; } return false; } //求一个string的ASCII码之和 public static string ToASCII(string str) ...{ int _tempint = 0; byte[] by = Encoding.ASCII.GetBytes(str); for (int i = 0; i < by.Length; i++) ...{ _tempint += by[i]; } return _tempint.ToString(); } public static string GetRandomStr(int codeCount) ...{ string allChar = "A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"; string[] allCharArray = allChar.Split(','); string randomCode = ""; int temp = -1; Random rand = new Random(); for (int i = 0; i < codeCount; i++) ...{ if (temp != -1) ...{ rand = new Random(i * temp * ((int)DateTime.Now.Ticks));//随时间生成 } int t = rand.Next(25); //如果重复了则重新生成 //if (temp == t) //{ // return GetRandomStr(codeCount); //} temp = t; randomCode += allCharArray[t]; } return randomCode; } }