/// <summary>
        /// 加密的方法
        /// </summary>
        /// <param name="a_strString">要加密的内容</param>
        /// <returns>返回加密后的内容</returns>
        public static string Encrypt(string a_strString)
        {
            try
            {
                TripleDESCryptoServiceProvider DES = new TripleDESCryptoServiceProvider();
                MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
                DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes("123456"));
                DES.Mode = CipherMode.ECB;
                ICryptoTransform DESDecrypt = DES.CreateEncryptor();
                string result = "";
                byte[] Buffer = Encoding.UTF8.GetBytes(a_strString);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, DES.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(Buffer, 0, Buffer.Length);
                cs.FlushFinalBlock();
                result = Convert.ToBase64String(ms.ToArray());
                return result; //返回加密后的文本
            }
            catch (System.Exception error)
            {
                return error.Message;
            }
        } /// <summary>
        /// 解密的方法
        /// </summary>
        /// <param name="a_strString">要解密的内容</param>
        /// <returns>返回解密后的内容</returns>
        public static string Decrypt(string a_strString)
        {
            TripleDESCryptoServiceProvider DES = new
            TripleDESCryptoServiceProvider();
            MD5CryptoServiceProvider hashMD5 = new MD5CryptoServiceProvider();
            DES.Key = hashMD5.ComputeHash(ASCIIEncoding.ASCII.GetBytes("123456"));
            DES.Mode = CipherMode.ECB;
            ICryptoTransform DESDecrypt = DES.CreateDecryptor();
            string result = "";
            try
            {
                byte[] Buffer = Convert.FromBase64String(a_strString);
                result = System.Text.Encoding.UTF8.GetString(
                DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
            }
            catch
            {
                result = "无效的认证码";
            }
            return result; //返回解密后的文本
        }这是我用的加密解密 ,对于数据之类的加密解密没问题,可是对请求的路径 加密解密就有问题了
你们有什么好的建议呢?请教一下

解决方案 »

  1.   

    -
    网上很多人在问怎么实现Web系统URL传输(表单提交)参数加密。例如:要进行一个用户帐号编辑,要传递用户的ID,URL如下:http://localhost/mysystem/editAccounts.aspx?ID=2 
    但又不想让别人知道这个用户的ID为2,恶意的使用者可能还会将2修改,改为别的用户ID。 
    加密传递的参数值可以解决问题。 
    以下是自己写的DEC加密、解密的基类。 文件名:Security.CS using System; 
    using System.Security.Cryptography; 
    using System.IO; 
    using System.Text; namespace EIP.Framework 

    /// 
    /// Security 的摘要说明。 
    /// Security类实现.NET框架下的加密和解密。 
    /// CopyRight [email protected]@[email protected] 
    /// 
    public class Security 

    string _QueryStringKey = "abcdefgh"; //URL传输参数加密Key 
    string _PassWordKey = "hgfedcba"; //PassWord加密Key public Security() 

    // 
    // TODO: 在此处添加构造函数逻辑 
    // 
    } /// 
    /// 加密URL传输的字符串 
    /// 
    /// 
    /// 
    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) 

    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); cs.Write(inputByteArray, 0, inputByteArray.Length); 
    cs.FlushFinalBlock(); StringBuilder ret = new StringBuilder(); //建立StringBuild对象,CreateDecrypt使用的是流对象,必须把解密后的文本变成流对象 return System.Text.Encoding.Default.GetString(ms.ToArray()); 
    } /// 
    /// 检查己加密的字符串是否与原文相同 
    /// 
    /// 
    /// 
    /// 
    /// 
    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; 




    } 类中URL及帐号加密使用了不同的KEY。调用URL加密过程如下: 
    EIP.Framework.Security objSecurity = new EIP.Framework.Security(); 
    objSecurity.EncryptQueryString(''待加密的字符串''); 解密:objSecurity.DecryptQueryString(''传递过来的参数);