Click here to Skip to main content
15,886,919 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
I need to encrypt and decrypt my web application URL. currently, I'm using global.asax route table to rewriting the URL like

Product --> http://localhost:45212/Product?p=2
Product --> http://localhost:45212/Product?p=2&w=1
Cart --> http://localhost:45212/Cart


I need full URL after the domain name encrypt and decrypt like below

Product --> http://localhost:45212/xjh&$&G&&^%
Product --> http://localhost:45212/xjh&$&G&&^YRW$#DFF%
Cart --> http://localhost:45212/^&jfgj^8678


if any other way is possible please let me know.

What I have tried:

Encrypt
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;
            }
        }



button click event
Response.Redirect("/Product?p="+Encrypt(code));

another page in page load event
string code = Decrypt(Request.QueryString["p"]);

this will be getting the value but I need encrypt decrypt after the domain the name.
Posted
Updated 10-Sep-20 20:15pm

1 solution

Just want to share encrypting an entire url is not a good idea but encrypting url parameters is okay and few websites do it.

Perhaps the following CodeProject article will help and guide: Preventive Method for URL Request Forgery- An Example with ASP.NET MVC[^]

Another way could be using Custom HttpModule Example | Microsoft Docs[^]
 
Share this answer
 
Comments
Member 13919255 11-Sep-20 4:28am    
hi... thanks for your reply in the above likes they encode only query string parameters.
I need to encrypt the whole URL means after the domain name
Sandeep Mewara 11-Sep-20 5:02am    
With CustomHttpModule, you can trap the url post the domain name and take action accordingly. Refer: https://stackoverflow.com/a/46579041

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900