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ódigoComprimento 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ódigopublic 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ódigopublic 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.