Member 13919255 Ответов: 1

Как зашифровать-расшифровать url в ASP.NET с#


Мне нужно зашифровать и расшифровать URL-адрес моего веб-приложения. в настоящее время я использую таблицу маршрутов global.asax для перезаписи URL-адреса, например

Продукт --> http://localhost:45212/Product?p=2
Продукт --> http://localhost:45212/Product?p=2&w=1
Тележка --> http://localhost:45212/Cart


Мне нужен полный URL-адрес после того, как доменное имя зашифровано и расшифровано, как показано ниже

Продукт --&ГТ; http://localhost:45212/xjh&$&усилителя;г&усилитель;&^%
Продукт --&ГТ; http://localhost:45212/xjh&$на&г&&усилителя;^YRW$#ДФФ%
Тележка --> http://localhost:45212/^&jfgj^8678


если возможен какой - либо другой способ, пожалуйста, дайте мне знать.

Что я уже пробовал:

Зашифровать
public static string Encrypt(string clearText)
        {
            try
            {
                string EncryptionKey = "@Test";
                byte[] clearBytes = Encoding.Unicode.GetBytes(clearText);
                using (Aes encryptor = Aes.Create())
                {
                    Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                    encryptor.Key = pdb.GetBytes(32);
                    encryptor.IV = pdb.GetBytes(16);
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(clearBytes, 0, clearBytes.Length);
                            cs.Close();
                        }
                        clearText = Convert.ToBase64String(ms.ToArray());
                    }
                }
                return clearText;
            }
            catch (Exception ex)
            {
                Log.writeLog(ex);
                return null;
            }
        }

Decrypt
        public static string Decrypt(string cipherText)
        {
            try
            {
                string EncryptionKey = "@Test";
                cipherText = cipherText.Replace(" ", "+");
                byte[] cipherBytes = Convert.FromBase64String(cipherText);
                using (Aes encryptor = Aes.Create())
                {
                    Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(EncryptionKey, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
                    encryptor.Key = pdb.GetBytes(32);
                    encryptor.IV = pdb.GetBytes(16);
                    using (MemoryStream ms = new MemoryStream())
                    {
                        using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
                        {
                            cs.Write(cipherBytes, 0, cipherBytes.Length);
                            cs.Close();
                        }
                        cipherText = Encoding.Unicode.GetString(ms.ToArray());
                    }
                }
                return cipherText;
            }
            catch (Exception ex)
            {
                Log.writeLog(ex);
                return null;
            }
        }



событие щелчка кнопки
Ответ.Redirect("/Product?p="+Encrypt(code));

еще одна страница в событии загрузки страницы
string code = Decrypt(запрос.Файл querystring["п"]);

это будет получать значение, но мне нужно зашифровать расшифровать после доменного имени.

1 Ответов

Рейтинг:
1

Sandeep Mewara

Просто хочу поделиться шифрованием всего url-адреса-это не очень хорошая идея, но шифрование параметров url-адреса-это нормально, и немногие веб-сайты делают это.

Возможно, следующая статья CodeProject поможет и направит вас: Профилактический метод для запроса URL в подделке документов - пример с ASP.NET в MVC[^]

Другим способом может быть использование Пример Пользовательского HttpModule | Microsoft Docs[^]


Member 13919255

привет... спасибо за ваш ответ в приведенных выше лайках они кодируют только параметры строки запроса.
Мне нужно, чтобы зашифровать весь url после доменного имени

Sandeep Mewara

С помощью CustomHttpModule вы можете перехватить url-адрес, разместив доменное имя, и принять соответствующие меры. См.: https://stackoverflow.com/a/46579041