Como dice el título, estoy consiguiendo:Longitud no válida para una matriz de caracteres base 64
Longitud no válida para una base 64 Char matriz.
He leído acerca de este problema aquí y parece que la sugerencia es para almacenar ViewState en SQL si es grande. Estoy usando un asistente con una gran cantidad de recopilación de datos, así que las posibilidades son que mi ViewState es grande. Pero, antes de pasar a la solución "store-in-DB" , ¿alguien puede echar un vistazo y decirme si tengo otras opciones?
construyo el correo electrónico para la entrega utilizando el método siguiente:
public void SendEmailAddressVerificationEmail(string userName, string to)
{
string msg = "Please click on the link below or paste it into a browser to verify your email account.<BR><BR>" +
"<a href=\"" + _configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
userName.Encrypt("verify") + "\">" +
_configuration.RootURL + "Accounts/VerifyEmail.aspx?a=" +
userName.Encrypt("verify") + "</a>";
SendEmail(to, "", "", "Account created! Email verification required.", msg);
}
El método de cifrado es el siguiente:
public static string Encrypt(string clearText, string Password)
{
byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
return Convert.ToBase64String(encryptedData);
}
Aquí es lo que el HTML se ve como en hotmail:
Por favor, haga clic en el enlace de abajo o péguelo en un navegador para verificar su cuenta de correo electrónico.
http://localhost:1563/Accounts/VerifyEmail.aspx?a=YOHY57xYRENEOu3H+FGq1Rf09AZAI56EPjfwuK8XWKg=
En el extremo receptor, la página VerifyEmail.aspx.cs tiene la línea:
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
Aquí es el captador de UserNameToVerify:
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
Y aquí es el método GetQueryStringValue:
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
Y el método de descifrado se parece a:
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
¿Puede este error puede remediar con una solución de código o debo almacenar ViewState en la base de datos?
PLZ me envía teh error – DevDemon
DevDemon - el error se registró como "FormatException: Longitud no válida para una matriz de caracteres Base-64." ¿Hay algo más que deba enviar? –