В чем проблема с этим зашифрованным QueryString - недопустимая длина для массива Base-64 char - PullRequest
1 голос
/ 29 апреля 2009

Я шифрую текст и отправляю его через 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 ]

6 голосов
/ 29 апреля 2009

3-й последний символ - это пробел. Я предполагаю, что это было + в оригинале, прежде чем он был помещен в строку запроса. + - это специальный символ в URL, представляющий пробел, поэтому QueryString преобразует его в пробел.

Попробуйте передать строку Base64 через

Server.UrlEncode(string); 

перед перенаправлением, которое корректно экранирует + в% urlchar и затем пропускает его через

Server.UrlDecode(string);

перед анализом на другой стороне

0 голосов
/ 29 апреля 2009

Мне кажется, что короткий символ ... Длина строки Base64 должна делиться на 4, дополняется, если необходимо, конечным символом '=' - пропущен ли трейлинг '=', т. Е. Должно быть 8ZnSq13yv2yYVDsehDnNUNp / yIFqsAQh4XNPbV1eLMpk / dMWc / YnMMEBy29MlgcYqpV2XPOf / Rpiz5S85VN / fkLbGTCkL / clBHh983Cps == "?

0 голосов
/ 29 апреля 2009

Возможно, проблема в том, что в вашей строке есть символы, которые имеют особое значение в запросе запроса. Например, '/', '=' и ''.

Вы можете закодировать строку перед отправкой или, что еще лучше, добавить ее в тело формы запроса и отправить ее таким образом вместо строки запроса.

0 голосов
/ 29 апреля 2009

Я вижу пробел в конце между p и s. Это недопустимый символ в строке base64.

...