正如标题所说,我得到了:
Base-64字符的长度无效 数组。
我在这里读到过这个问题 建议是存储在 SQL 查看状态,如果它是大的 使用向导进行大量的数据收集 是我的 ViewState 是大的。但是,在我转向“存储在数据库中”之前, 解决办法,也许有人可以看看,并告诉我,如果我有 其他选择?
我使用以下方法建立电子邮件发送:
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);
}
Encrypt 方法如下所示:
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);
}
下面是 hotmail 中的 HTML:
请按以下连结或 粘贴到浏览器中以验证您的 电邮帐户。
Http://localhost:1563/accounts/verifyemail.aspx?a=yohy57xyreneou3h+fgq1rf09azai56epjfwuk8xwkg=
在接收端, verifyemail.aspx.cs 页面上有这样一行字:
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
下面是 UserNameToVerify 的 getter:
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
下面是 GetQueryStringValue 方法:
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
解密方法是这样的:
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
这个错误是否可以通过代码修复来补救,还是必须将 ViewState 存储在数据库中?