解密时Base-64 char数组的长度无效

时间:2012-06-04 08:59:39

标签: c# asp.net exception base64 encryption

在某些情况下,我通过(解密)获得以下异常,我无法确切地知道原因:

  

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,它可以无异常地工作..

并且发送网址存在问题的用户包含3Dn%2bsJJPXprU4%3d

这是一个浏览器问题?? !!

2 个答案:

答案 0 :(得分:8)

解析查询字符串值在解析为请求时已经完成。没有尝试 'HttpUtility.UrlDecode'

public static string decodeSTROnUrl(string thisDecode)
    {
        return Decrypt(thisDecode);
    }

答案 1 :(得分:4)

64位编码在字符串中存在空格问题。 尝试在加密后添加以下内容

sEncryptedString = sEncryptedString.Replace(' ', '+');