1

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

"8ZnSq13yv2yYVDsehDnNUNp/yIFqsAQh4XNPbV1eLMpk/dMWpc/YnMMEBy29MlgcYqpV2XPOf/Rpiz5S85VN/fkLbGTCkL/clBHh983Cp s="

解密函数如下

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;
    }
}

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

4

4 回答 4

6

倒数第三个字符是空格。我猜它+在被放在查询字符串上之前是原始的。+ 是 URL 上代表空格的特殊字符,因此 QueryString 将其转换为您的空格。

尝试通过您的 Base64 字符串

Server.UrlEncode(string); 

在重定向之前 & 将正确地将 + 转义为 %urlchar 然后通过

Server.UrlDecode(string);

在另一边解析之前

于 2009-04-29T10:52:16.240 回答
0

p我在和之间看到了一个空格s。这不是 base64 字符串中允许的字符。

于 2009-04-29T10:51:27.800 回答
0

问题很可能是您的字符串包含在请求查询中具有特殊含义的字符。'/' 、 '=' 和 ' ' 例如。

您可以在发送之前对字符串进行编码,或者更好的是,将其添加到请求的表单正文中并以这种方式发送而不是查询字符串。

于 2009-04-29T10:53:03.663 回答
-1

对我来说看起来很短... Base64 字符串的长度应该可以被 4 整除,必要时用尾随 '=' 填充 - 你是否缺少尾随 '=',即它应该是“8ZnSq13yv2yYVDsehDnNUNp/yIFqsAQh4XNPbV1eLMpk/dMWpc/YnMMEBy29MlgcYqpV2XPOf/ Rpiz5S85VN/fkLbGTCkL/clBHh983Cps=="?

于 2009-04-29T10:54:39.400 回答