Như tiêu đề cho biết, tôi nhận được:
Độ dài không hợp lệ cho mảng ký tự Base-64.
Tôi đã đọc về vấn đề này ở đây và có vẻ như đề xuất là lưu trữ ViewState trong SQL nếu nó lớn. Tôi đang sử dụng một trình hướng dẫn với nhiều thu thập dữ liệu nên rất có thể ViewState của tôi lớn. Tuy nhiên, trước khi tôi chuyển sang giải pháp "store-in-DB", có lẽ ai đó có thể xem qua và cho tôi biết liệu tôi có các tùy chọn khác không?
Tôi tạo email để gửi bằng phương pháp dưới đây:
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);
}
Phương thức Mã hóa trông giống như sau:
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);
}
Đây là HTML trong hotmail:
Vui lòng nhấp vào liên kết bên dưới hoặc dán vào trình duyệt để xác minh tài khoản email của bạn.
Ở đầu nhận, trang VerifyEmail.aspx.cs có dòng:
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
Đây là getter cho UserNameToVerify:
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
Và đây là phương thức GetQueryStringValue:
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
Và phương pháp giải mã giống như sau:
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
Lỗi này có thể được khắc phục bằng bản sửa lỗi mã hay tôi phải lưu trữ ViewState trong cơ sở dữ liệu?