Başlığın dediği gibi, alıyorum:
Base-64 karakter dizisi için geçersiz uzunluk.
Bu sorunu burada okudum ve görünüşe göre öneri ViewState'i büyükse SQL'de depolamak. Büyük miktarda veri toplamaya sahip bir sihirbaz kullanıyorum, bu nedenle ViewState'im büyük. Ama, "DB'de mağaza" çözümüne dönmeden önce, belki birisi bir göz atabilir ve başka seçeneklerim olup olmadığını söyleyebilir?
E-postayı teslimat için aşağıdaki yöntemi kullanarak oluşturuyorum:
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);
}
Şifreleme yöntemi şuna benzer:
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);
}
HTML, hotmail'de şöyle görünür:
E-posta hesabınızı doğrulamak için lütfen aşağıdaki bağlantıya tıklayın veya bir tarayıcıya yapıştırın.
Alıcı tarafta, VerifyEmail.aspx.cs sayfasında şu satır bulunur:
string username = Cryptography.Decrypt(_webContext.UserNameToVerify, "verify");
İşte UserNameToVerify için alıcı:
public string UserNameToVerify
{
get
{
return GetQueryStringValue("a").ToString();
}
}
Ve işte GetQueryStringValue yöntemi:
private static string GetQueryStringValue(string key)
{
return HttpContext.Current.Request.QueryString.Get(key);
}
Ve şifre çözme yöntemi şöyle görünür:
public static string Decrypt(string cipherText, string password)
{
**// THE ERROR IS THROWN HERE!!**
byte[] cipherBytes = Convert.FromBase64String(cipherText);
Bu hata bir kod düzeltmesiyle giderilebilir mi yoksa ViewState'i veritabanında depolamalı mıyım?