제목에서 알 수 있듯이 다음과 같은 결과를 얻었습니다.
Base-64 char 배열의 길이가 잘못되었습니다.
나는 여기 에서이 문제에 대해 읽었으며 ViewState가 큰 경우 SQL에 저장하는 것이 좋습니다. 데이터 수집이 많은 마법사를 사용하고 있으므로 ViewState가 클 가능성이 큽니다. 그러나 "DB에 저장"솔루션으로 전환하기 전에 누군가가 다른 옵션이 있는지 살펴보고 말해 줄 수 있습니까?
아래 방법을 사용하여 배송 용 이메일을 구성합니다.
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);
}
핫메일에서 HTML은 다음과 같습니다.
아래 링크를 클릭하거나 브라우저에 붙여 넣어 이메일 계정을 확인하십시오.
받는 쪽에서 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를 저장해야합니까?