当前位置: 代码迷 >> ASP.NET >> 说好的 大神呢!标题要长,该如何解决
  详细解决方案

说好的 大神呢!标题要长,该如何解决

热度:3401   发布时间:2013-02-25 00:00:00.0
说好的 大神呢!!!!!!!!!标题要长
怎么改能让加密的密文中 包含%、#这些符号


C# code
 public class Security  {    string _QueryStringKey = "ABCDEFH"; //URL传输参数加密Key//ijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ    string _PasswordKey = "hgfedcba"; //Password加密Key//ZYXWVUTSRQPONMLKJIHGFEDCBAzyxwvutsrqponmlkji    public Security()    {      //      // TODO: 在此处添加构造函数逻辑      //    }    public string EncryptQueryString(string QueryString)    {      return Encrypt(QueryString, _QueryStringKey);    }        /// 解密URL传输的字符串    public string DecryptQueryString(string QueryString)    {      return Decrypt(QueryString, _QueryStringKey);    }        /// 加密帐号口令    public string EncryptPassword(string Password)    {      return Encrypt(Password, _PasswordKey);    }        /// 解密帐号口令    public string DecryptPassword(string Password)    {      return Decrypt(Password, _PasswordKey);    }        /// DEC 加密过程    public string Encrypt(string pToEncrypt, string sKey)    {      DESCryptoServiceProvider des = new DESCryptoServiceProvider(); //把字符串放到byte数组中       byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);      //byte[] inputByteArray=Encoding.Unicode.GetBytes(pToEncrypt);       des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量            des.IV = ASCIIEncoding.ASCII.GetBytes(sKey); //原文使用ASCIIEncoding.ASCII方法的GetBytes方法             MemoryStream ms = new MemoryStream(); //使得输入密码必须输入英文文本      CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);      cs.Write(inputByteArray, 0, inputByteArray.Length);      cs.FlushFinalBlock();      StringBuilder ret = new StringBuilder();      foreach (byte b in ms.ToArray())      {        ret.AppendFormat("{0:X2}", b);      }      ret.ToString();      return ret.ToString();    }        /// DEC 解密过程    public string Decrypt(string pToDecrypt, string sKey)    {      try      {        DESCryptoServiceProvider des = new DESCryptoServiceProvider();        byte[] inputByteArray = new byte[pToDecrypt.Length / 2];        for (int x = 0; x < pToDecrypt.Length / 2; x++)        {          int i = (Convert.ToInt32(pToDecrypt.Substring(x * 2, 2), 16));          inputByteArray[x] = (byte)i;        }        des.Key = ASCIIEncoding.ASCII.GetBytes(sKey); //建立加密对象的密钥和偏移量,此值重要,不能修改         des.IV = ASCIIEncoding.ASCII.GetBytes(sKey);        MemoryStream ms = new MemoryStream();        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write);        //if (cs.Length > 0&&cs.Length!=null)        //{        cs.Write(inputByteArray, 0, inputByteArray.Length);        cs.FlushFinalBlock();        StringBuilder ret = new StringBuilder(); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象         return System.Text.Encoding.Default.GetString(ms.ToArray());      }      catch      {        return "";      }     // }     // else      //{        //return "";      //}    }        /// 检查己加密的字符串是否与原文相同    public bool ValidateString(string EnString, string FoString, int Mode)    {      switch (Mode)      {        default:        case 1:          if (Decrypt(EnString, _QueryStringKey) == FoString.ToString())          {            return true;          }          else          {            return false;          }        case 2:          if (Decrypt(EnString, _PasswordKey) == FoString.ToString())          {            return true;          }          else          {            return false;          }      }    }  }


------解决方案--------------------------------------------------------
自己写规则了
 不过没什么必要 加密完还不要解密的
 你弄个%上去 针对特殊 汉字或者字母 做转义 貌似意思不大
  相关解决方案