状況を説明しましょう。私のコードでは、登録後に生成される文字列に変換されたユーザー ID を暗号化しています。暗号化された文字列は、以下のように url パラメーターとして渡されます。
string ConfirmCode = string.Empty;
Common.Secure.Security mySec = new Common.Secure.Security();
ConfirmCode = mySec.Encrypt(myMember.MemberID.ToString());
string EmailValidationLink = "<a href=\'" + pageScheme + "://" + CurrentDomain.HostName + "/Contents/Common/" + "EN" + "/" + CurrentDomain.EmailValidationPage + "?ConfirmCode=" + **UrlEncode(ConfirmCode)** + "\'>Click here to validate your account.</a>";
と:
protected String UrlEncode(String text)
{
return HttpContext.Current.Server.UrlEncode(text);
}
UrlEncode を使用して暗号化された文字列を渡していますが、暗号化されたテキストに '+' 記号が含まれている場合に問題が発生します。この '+' 記号は ' ' スペースと見なされるため、復号化中に Format Exception が発生します。
たとえば、暗号化されたテキストがフェッチ中に「S7+5tZzTm0k=」のようなものである場合、+ 記号は「S7 5tZzTm0k=」と見なされ、フォーマット例外が発生します。
私の暗号化と復号化のコードは以下のようなものです
public string Decrypt(string Text)
{
if (!ENABLED) return Text;
des.Key = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(myKey));
des.Mode = CipherMode.ECB;
ICryptoTransform desdencrypt = des.CreateDecryptor();
Byte[] buff = Convert.FromBase64String(Text);
return ASCIIEncoding.ASCII.GetString(desdencrypt.TransformFinalBlock(buff, 0, buff.Length));
}
public string Encrypt(string Text)
{
if (!ENABLED) return Text;
des.Key = hashmd5.ComputeHash(ASCIIEncoding.ASCII.GetBytes(myKey));
des.Mode = CipherMode.ECB;
ICryptoTransform desdencrypt = des.CreateEncryptor();
ASCIIEncoding MyASCIIEncoding = new ASCIIEncoding();
Byte[] buff = ASCIIEncoding.ASCII.GetBytes(Text);
return Convert.ToBase64String(desdencrypt.TransformFinalBlock(buff, 0, buff.Length));
}
私はこれについてグーグルで調べていて、誰もが UrlEncode を使用すると問題が解決すると示唆していますが、私の場合、使用しても問題は解決しませんでした。
これについてどうすればよいか教えてください。
if (Request.QueryString["ConfirmCode"] != null)
{
bool isAccountSuspended;
isAccountSuspended = AccountManagement.AcountManager.EmailValidationNote(HttpContext.Current.Server.UrlDecode(Request.QueryString["ConfirmCode"]));
if (!isAccountSuspended)
{
lblMessage.Text = "Your account is already suspended. Please contact customer service.";
lblMessage.ForeColor = System.Drawing.Color.Red;
}
else
{
lblMessage.Text = "Thank you for verifying your email address. We hope you’ll enjoy playing with us.";
}
}
よろしくSrividhya