如何从查询字符串变量中使用的加密方法中删除非法字符的返回值

时间:2012-01-12 08:59:23

标签: asp.net encryption

我正在使用Asp.net开发一个项目,并且有一个加密方法。当我用它来加密一个字符串时,它返回一个字符串,其中包含一些像'+'的字符,因为我在查询字符串中使用它返回的值我需要删除这些字符

前:

http://localhost/Cpanel/CompanyInfo/Hotels/EditHotel/VKWbk+G9F6E=

错误:HTTP错误404.11 - 未找到 请求过滤模块配置为拒绝包含双转义序列的请求。

http://localhost/Cpanel/CompanyInfo/Hotels/EditHotel/bprrmsZ6atI=

效果很好

这是我的加密方法:

 public static string EncryptString(string Message)
        {
            string Passphrase = System.Configuration.ConfigurationSettings.AppSettings["CryptographyKey"];

            byte[] Results;
            System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding();

            //Hash the passphrase using MD5            
            MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider();
            byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(Passphrase));

            TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider();
            TDESAlgorithm.Key = TDESKey;
            TDESAlgorithm.Mode = CipherMode.ECB;
            TDESAlgorithm.Padding = PaddingMode.PKCS7;

            byte[] DataToEncrypt = UTF8.GetBytes(Message);

            try
            {
                ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor();
                Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length);
            }
            finally
            {
                TDESAlgorithm.Clear();
                HashProvider.Clear();
            }

            return HttpUtility.HtmlEncode(Convert.ToBase64String(Results));
        }

我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

似乎你的加密"是base64编码。 Base64仅使用字母数字字符,+字符和等号=字符。平等的性格不会引起任何问题,只有" +" (在URI中被解释为空格)。你可以简单地将.Replace()+与_一起使用,反之亦然,这样就可以在你的主控制器中解决这个问题了。

另一种方法(不需要更改代码)是允许在web.config中进行双重转义:

<system.webServer>
    <security>
        <requestFiltering allowDoubleEscaping="true"/>
    </security>
</system.webServer>

这只适用于IIS,而不适用于ASP.NET Development Server。但是,这带来了一些安全问题。有关详细信息,这里有一篇非常神的文章:http://www.hanselman.com/blog/ExperimentsInWackinessAllowingPercentsAnglebracketsAndOtherNaughtyThingsInTheASPNETIISRequestURL.aspx

答案 1 :(得分:0)

准备查询字符串值时,请执行以下操作:

Server.UrlEncode(Variable)

然后将其传递给查询字符串。

在阅读查询字符串时使用解码方法如:

Server.UrlDecode("QuerySting"); 

让我知道任何疑虑。