首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

加密如何让密文里面带符号,附代码

2012-06-14 
加密怎么让密文里面带符号,附代码C# codepublic class Security{string _QueryStringKey ABCDEFH //U

加密怎么让密文里面带符号,附代码

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;          }      }    }  }


[解决办法]
MARK下 
一般自己就用的MD5,SHA1 加上自己的一些处理加密 但是单向的 有时有点不方便

热点排行