4

(復号化)によって次の例外が発生する場合がありますが、理由を正確に認識できません:

Base-64文字配列の長さが無効です

私のコード:

public static string encodeSTROnUrl(string thisEncode)
{
  if (null == thisEncode)
      return string.Empty;

  return HttpUtility.UrlEncode(Encrypt(thisEncode));
}


// string thisDecode = "3Dn%2bsJJPXprU4%3d"; //this is the value which cause the exception.
public static string decodeSTROnUrl(string thisDecode)
{
   return Decrypt(HttpUtility.UrlDecode(thisDecode));
}


QueryStringEncryption.Cryptography.decodeSTROnUrl(Request.QueryString["val"].ToString());

例外をスローする正確な行は次のとおりです。

 Byte[] byteArray = Convert.FromBase64String(text);

暗号化と復号化の操作の前後にエンコードとデコードを行うことでこの問題を解決できると思いましたが、一部の値でもこの例外がスローされます。


注:奇妙な動作に注意してください:私のメールに送信されるクエリ文字列としてのIDは:n%2bsJJPXprU4%3dであり、例外なく機能します。

送信されたURLに問題があるユーザー3Dn%2bsJJPXprU4%3d

これはブラウザの問題ですか??!!

4

2 に答える 2

8

クエリ文字列値のデコードは、リクエストに解析されるときに既に行われています。「HttpUtility.UrlDecode」なしで試してください

public static string decodeSTROnUrl(string thisDecode)
    {
        return Decrypt(thisDecode);
    }
于 2012-06-04T09:52:58.303 に答える
4

64ビットエンコーディングには、文字列内のスペースに問題があります。暗号化後に以下を追加してみてください

sEncryptedString = sEncryptedString.Replace(' ', '+');
于 2012-06-04T09:03:16.820 に答える