加密包括密钥的查询字符串

本文关键字:查询 字符串 密钥 包括 加密 | 更新日期: 2023-09-27 18:22:08

我有一个应用程序,它使用查询字符串在页面周围传递一些值。我发现了一些关于如何加密查询字符串中的值的例子,但问题是,我的KEYS告诉了更多关于查询字符串的信息,而不是所有转换为字符串的整数的值。

有没有一种方法可以在ASP.NET中加密整个查询字符串,包括密钥和键值?

类似于:

Default.aspx?value1=40&value2=30&value3=20

 Default.aspx?56sdf78fgh90sdf4564k34klog5646l

谢谢!

加密包括密钥的查询字符串

上面的许多引用忽略了一个问题,那就是在返回加密字符串URL Encode之前(请参阅下面返回字符串之前的内容)。我使用的是IIS 7.5,它会自动为你"解码"字符串,所以解密"应该"是可以的。加密和解密代码如下所示。

public string EncryptQueryString(string inputText, string key, string salt)
{
    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;
                }
            }
        }
    }
}
public string DecryptQueryString(string inputText, string key, string salt)
        {
            byte[] encryptedData = Convert.FromBase64String(inputText);
            PasswordDeriveBytes secretKey = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(key), Encoding.ASCII.GetBytes(salt));
            using (RijndaelManaged rijndaelCipher = new RijndaelManaged())
            {
                using (ICryptoTransform decryptor = rijndaelCipher.CreateDecryptor(secretKey.GetBytes(32), secretKey.GetBytes(16)))
                {
                    using (MemoryStream memoryStream = new MemoryStream(encryptedData))
                    {
                        using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
                        {
                            byte[] plainText = new byte[encryptedData.Length];
                            cryptoStream.Read(plainText, 0, plainText.Length);
                            string utf8 = Encoding.UTF8.GetString(plainText);
                            return utf8;
                        }
                    }
                }
            }
        }

网络上有很多例子。

其中一些:

如何在asp.net中加密查询字符串?

如何在asp.net 中传递加密查询字符串

http://www.codeproject.com/Articles/33350/Encrypting-Query-Strings

http://www.keyvan.ms/how-to-encrypt-query-string-parameters-in-asp-net

http://forums.asp.net/t/989552.aspx/1

现在你说你也喜欢加密密钥,实际上你要做的是加密所有的url行,然后你只需要读取RawUrl之后呢?并对其进行解密