Erro ao descriptografar string
21/01/2015
0
Eu tenho um método para criptografar e descriptografar dados. Testei no Console Application e o mesmo funciona perfeitamente. Ao levar este método para o controller, eu recebo seguinte erro:
Isso ocorre quando eu coloco uma string grande para descriptografar(acima de 30caracteres +/-). Porém, necessito trafegar uma string bem maior( criptografada).
Não entendo porque no Consolle Application funciona e no MVC( controller), recebo esse
Meu método para criptografar e descriptografar:
A forma que utilizo em meu Controller:
Pelo erro, me fala que o comprimento é inválido para base64, porém não entendo porque funciona no console e não no controller.
Comprimento inválido para uma matriz ou uma cadeia de caracteres de Base 64.
Isso ocorre quando eu coloco uma string grande para descriptografar(acima de 30caracteres +/-). Porém, necessito trafegar uma string bem maior( criptografada).
Não entendo porque no Consolle Application funciona e no MVC( controller), recebo esse
Meu método para criptografar e descriptografar:
public class Criptografia : ICriptografia { public Criptografia() { } // Essa seqüência constante é usada como um valor "salt" para as chamadas de função PasswordDeriveBytes . // Este tamanho da IV (em bytes) devem = (KeySize / 8). KeySize padrão é 256, portanto, a IV deve ser // 32 bytes de comprimento. Usando uma seqüência de 16 caracteres aqui nos dá 32 bytes quando convertido para um array de bytes. private static readonly byte[] initVectorBytes = Encoding.ASCII.GetBytes("tu89geji340t89u2"); // Esta constante é utilizado para determinar o tamanho da chave do algoritmo de encriptação. private const int keysize = 256; const string senha = "exemplo"; public static string _Encrypt(string Message) { byte[] Results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(senha)); TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = CipherMode.ECB; TDESAlgorithm.Padding = PaddingMode.PKCS7; byte[] DataToEncrypt = UTF8.GetBytes(Message); try { ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor(); Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return Convert.ToBase64String(Results); } public string Encrypt(string Message) { return Criptografia._Encrypt(Message); } public static string _Decrypt(string Message) { byte[] Results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(senha)); TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = CipherMode.ECB; TDESAlgorithm.Padding = PaddingMode.PKCS7; byte[] DataToDecrypt = Convert.FromBase64String(Message); try { ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor(); Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return UTF8.GetString(Results); } public string Decrypt(string Message) { return Criptografia._Decrypt(Message); } } }
A forma que utilizo em meu Controller:
public ActionResult Dependente(string name) { Criptografia cr= new Criptografia(); string nome = Request.QueryString["name"]; string nomeDescrypt = cr.Decrypt(nome); var dependente = dependenteRepository.Dependentes.Where(r => r.sLogin == nomeDescrypt).ToList(); return View(dependente); }
Pelo erro, me fala que o comprimento é inválido para base64, porém não entendo porque funciona no console e não no controller.
Randrade
Curtir tópico
+ 0
Responder
Posts
21/06/2017
Ezequiel Daniel
Eu tenho um método para criptografar e descriptografar dados. Testei no Console Application e o mesmo funciona perfeitamente. Ao levar este método para o controller, eu recebo seguinte erro:
Isso ocorre quando eu coloco uma string grande para descriptografar(acima de 30caracteres +/-). Porém, necessito trafegar uma string bem maior( criptografada).
Não entendo porque no Consolle Application funciona e no MVC( controller), recebo esse
Meu método para criptografar e descriptografar:
A forma que utilizo em meu Controller:
Pelo erro, me fala que o comprimento é inválido para base64, porém não entendo porque funciona no console e não no controller.
Comprimento inválido para uma matriz ou uma cadeia de caracteres de Base 64.
Isso ocorre quando eu coloco uma string grande para descriptografar(acima de 30caracteres +/-). Porém, necessito trafegar uma string bem maior( criptografada).
Não entendo porque no Consolle Application funciona e no MVC( controller), recebo esse
Meu método para criptografar e descriptografar:
public class Criptografia : ICriptografia { public Criptografia() { } // Essa seqüência constante é usada como um valor "salt" para as chamadas de função PasswordDeriveBytes . // Este tamanho da IV (em bytes) devem = (KeySize / 8). KeySize padrão é 256, portanto, a IV deve ser // 32 bytes de comprimento. Usando uma seqüência de 16 caracteres aqui nos dá 32 bytes quando convertido para um array de bytes. private static readonly byte[] initVectorBytes = Encoding.ASCII.GetBytes("tu89geji340t89u2"); // Esta constante é utilizado para determinar o tamanho da chave do algoritmo de encriptação. private const int keysize = 256; const string senha = "exemplo"; public static string _Encrypt(string Message) { byte[] Results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(senha)); TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = CipherMode.ECB; TDESAlgorithm.Padding = PaddingMode.PKCS7; byte[] DataToEncrypt = UTF8.GetBytes(Message); try { ICryptoTransform Encryptor = TDESAlgorithm.CreateEncryptor(); Results = Encryptor.TransformFinalBlock(DataToEncrypt, 0, DataToEncrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return Convert.ToBase64String(Results); } public string Encrypt(string Message) { return Criptografia._Encrypt(Message); } public static string _Decrypt(string Message) { byte[] Results; System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); MD5CryptoServiceProvider HashProvider = new MD5CryptoServiceProvider(); byte[] TDESKey = HashProvider.ComputeHash(UTF8.GetBytes(senha)); TripleDESCryptoServiceProvider TDESAlgorithm = new TripleDESCryptoServiceProvider(); TDESAlgorithm.Key = TDESKey; TDESAlgorithm.Mode = CipherMode.ECB; TDESAlgorithm.Padding = PaddingMode.PKCS7; byte[] DataToDecrypt = Convert.FromBase64String(Message); try { ICryptoTransform Decryptor = TDESAlgorithm.CreateDecryptor(); Results = Decryptor.TransformFinalBlock(DataToDecrypt, 0, DataToDecrypt.Length); } finally { TDESAlgorithm.Clear(); HashProvider.Clear(); } return UTF8.GetString(Results); } public string Decrypt(string Message) { return Criptografia._Decrypt(Message); } } }
A forma que utilizo em meu Controller:
public ActionResult Dependente(string name) { Criptografia cr= new Criptografia(); string nome = Request.QueryString["name"]; string nomeDescrypt = cr.Decrypt(nome); var dependente = dependenteRepository.Dependentes.Where(r => r.sLogin == nomeDescrypt).ToList(); return View(dependente); }
Pelo erro, me fala que o comprimento é inválido para base64, porém não entendo porque funciona no console e não no controller.
Como resolveu este problema, tenho um semelhante?
Responder
Clique aqui para fazer login e interagir na Comunidade :)