Array
(
)

Erro ao descriptografar string

Randrade
   - 21 jan 2015

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:
#Código

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:
#Código
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:
#Código
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.