如何加密查询字符串避免加号和斜杠和反斜杠?

时间:2016-03-17 17:45:48

标签: c# asp.net-mvc encryption

每当我尝试新的加密算法来获取加密字符串并在QUeryString中使用它时,我面临生成不干净字符串的问题(不包含(+)符号和(/)的字符串)。
我想在ASP.NET MVC中使用它。 是不是有办法加密避免这些迹象的字符串?。

我正在加密一个字符串(如果它是一个有效的查询字符串,它不应该没关系)然后我将这个字符串附加到我有的URL

编辑1: 这是加密代码:

        public string Encrypt(string inputText, string key = "", string salt = "")
    {
        key = !string.IsNullOrEmpty(key) ? key : EncryptionKey;
        salt = !string.IsNullOrEmpty(salt) ? salt : EncryptionSalt;

        byte[] plainText = Encoding.UTF8.GetBytes(inputText);

        using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
        {
            PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));
            using (ICryptoTransform encryptor = rijndaelCipher.CreateEncryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
            {
                using (MemoryStream memoryStream = new MemoryStream())
                {
                    using (CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write))
                    {
                        cryptoStream.Write(plainText, 0, plainText.Length);
                        cryptoStream.FlushFinalBlock();
                        string base64 = Convert.ToBase64String(memoryStream.ToArray());

                        // Generate a string that won't get screwed up when passed as a query string.
                        string urlEncoded = HttpUtility.UrlEncode(base64);
                        return urlEncoded;
                    }
                }
            }
        }
    }

编辑2:
编码字符串的示例:

1|6

就像那样,我希望通过ASP.NET MVC操作中的字符串参数来接收它。

1 个答案:

答案 0 :(得分:1)

好吧,你可以转换为HEX字符串而不是base64,这只包含字母AF和0-9,所以url编码没有问题,但我很确定,那是' s不是问题的根源。

您是单独加密每个参数值还是一起加密整个查询字符串?因为如果你正在做后者,服务器将无法获得参数值。如果您正在执行前者,则还必须在服务器上单独解密每个参数值。

修改

我几年前做过类似事情,因为这是客户的要求。所以我的所有动作都只接受一个参数

http://example.com/Home/SomeAction?value=SomeEncryptedString

SomeEncryptedString包含一个加密的(后来当然是URLEncoded)查询字符串(value1=hello&value2=world)。在服务器端,操作的第一步是解密字符串并将结果解析为NameValue集合。