Criptografar querystring ASP NET MVC
Olá pessoal!
Algumas vezes precisamos transmitir alguma informação via querystring e que não gostaríamos de deixar a informação de forma explícita na URL. Uma forma fácil de “ocultarmos” a informação é através da criptografia da querystring. Lembrando que este recurso é apenas para reforçar a segurança do seu site. Nunca deixe de fazer as validações do lado do servidor.
Para este exemplo vamos utilizar o template de projeto ASP NET MVC.
Na HomeController modifique o a action Index e crie um ActionResult e adicione uma View para receber um id e um param como string:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public ActionResult Index() { ViewBag.Id = CriptografiaHelper.EncryptQueryString("1"); ViewBag.Param = CriptografiaHelper.EncryptQueryString("teste"); return View(); } public ActionResult SegundaPagina(string id, string param) { ViewBag.IdDescriptografado = CriptografiaHelper.DecryptQueryString(id); ViewBag.ParamDescriptografado = CriptografiaHelper.DecryptQueryString(param); return View(); } |
Crie uma pasta chamada helpers (ou qualquer outro nome) e crie uma classe chama estática chamada CriptografiaHelper. Essa classe será responsável por criptografar e descriptografar os dados da query string.
Coloque o seguinte código na classe criada:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
using System; using System.IO; using System.Security.Cryptography; using System.Text; /// <summary> /// Classe estática utilizada para criptografar a querystring /// </summary> public static class CriptografiaHelper { const string encryptionKey = "CH4V3"; //Coloque aqui uma chave única /// <summary> /// Método para criptografar os dados da querystring /// </summary> /// <param name="clearText"></param> /// <returns></returns> public static string EncryptQueryString(string clearText) { byte[] clearBytes = Encoding.Unicode.GetBytes(clearText); using (Aes encryptor = Aes.Create()) { var 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 (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write)) { cs.Write(clearBytes, 0, clearBytes.Length); cs.Close(); } clearText = Convert.ToBase64String(ms.ToArray()); } } return clearText; } /// <summary> /// Método para criptografar os dados da querystring /// </summary> /// <param name="clearText"></param> /// <returns></returns> public static string DecryptQueryString(string cipherText) { cipherText = cipherText.Replace(" ", "+"); byte[] cipherBytes = Convert.FromBase64String(cipherText); using (Aes encryptor = Aes.Create()) { var 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 (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write)) { cs.Write(cipherBytes, 0, cipherBytes.Length); cs.Close(); } cipherText = Encoding.Unicode.GetString(ms.ToArray()); } } return cipherText; } } |
Na Index.cshtml coloque o seguinte código na página:
1 |
<h1>@Html.ActionLink("Segunda página", "SegundaPagina", "Home", new { id = ViewBag.Id, param = ViewBag.Param }, null)</h1> |
E na SegundaPagina.cshtml o seguinte código:
1 2 |
<label><b>Id</b> </label><div>@ViewBag.IdDescriptografado</div> <label><b>Param:</b> </label><div>@ViewBag.ParamDescriptografado</div> |
Execute o projeto e clique no link. A url será exibida da seguinte forma:
http://localhost:0000/Home/SegundaPagina/otj88HlnkcUpzUiyuALPGQ%3d%3d?param=taDmNIZW9xDWjZxBAyTG4A%3D%3D
Este foi apenas um simples exemplo de como criptografar query string. Neste exemplo utilizei ViewBag, mas você pode utilizar o mesmo conceito em uma viewmodel por exemplo.
Para fazer o download do projeto em MVC 5 clique aqui.
um abraço e até a próxima!
TOP Muito Bom! , Funciona perfeitamente.