这个加密的QueryString的问题是什么 - Base-64 char数组的长度无效

1 c# asp.net base64 request.querystring

我正在加密文本并通过QueryString发送它.

"8ZnSq13yv2yYVDsehDnNUNp/yIFqsAQh4XNPbV1eLMpk/dMWpc/YnMMEBy29MlgcYqpV2XPOf/Rpiz5S85VN/fkLbGTCkL/clBHh983Cp s="
Run Code Online (Sandbox Code Playgroud)

Decrypt函数如下所示

public static string Decrypt(string stringToDecrypt)//Decrypt the content
{
    try
    {
        byte[] key = Convert2ByteArray(DESKey);
        byte[] IV = Convert2ByteArray(DESIV);
        int len = stringToDecrypt.Length;
        byte[] inputByteArray = Convert.FromBase64String(stringToDecrypt);

        DESCryptoServiceProvider des = new DESCryptoServiceProvider();
        MemoryStream ms = new MemoryStream(); 

        CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
        cs.Write(inputByteArray, 0, inputByteArray.Length);

        cs.FlushFinalBlock();

        Encoding encoding = Encoding.UTF8; return encoding.GetString(ms.ToArray());
    }
    catch (System.Exception ex)
    {
        throw ex;
    }
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能解决这个问题?

Eoi*_*ell 6

第3个最后一个字符是一个空格.我猜它是+在它被放在查询字符串之前的原始版本.+是表示空格的URL上的特殊字符,因此QueryString将其转换为您的空间.

尝试传递Base64字符串

Server.UrlEncode(string); 
Run Code Online (Sandbox Code Playgroud)

在重定向之前,它将正确地将+转换为%urlchar,然后将其传递通过

Server.UrlDecode(string);
Run Code Online (Sandbox Code Playgroud)

在解析它之前