Подтвердить что ты не робот

Недопустимая длина массива Base-64 char во время декодирования/дешифрования

Q: Я сталкиваюсь со следующей большой проблемой:

от времени к другому я нахожу следующее исключение:

Недопустимая длина для массива Base-64 char

Я использую шифрование и дешифрование:

public static string Encrypt(string text)
        {

            try
            {
                key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                Byte[] byteArray = Encoding.UTF8.GetBytes(text);
                MemoryStream memoryStream = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(memoryStream,des.CreateEncryptor(key, IV), CryptoStreamMode.Write);
                cryptoStream.Write(byteArray, 0, byteArray.Length);
                cryptoStream.FlushFinalBlock();
                return Convert.ToBase64String(memoryStream.ToArray());
            }

            catch (Exception ex)
            {
              string message =  ex.Message;
            }

            return string.Empty;
        }



        public static string Decrypt(string text)
        {
            try
            {
                key = Encoding.UTF8.GetBytes(stringKey.Substring(0, 8));
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                text = text.Replace(" ", "+")
                Byte[] byteArray = Convert.FromBase64String(text);
                MemoryStream memoryStream = new MemoryStream();
                CryptoStream cryptoStream = new CryptoStream(memoryStream,
                des.CreateDecryptor(key, IV), CryptoStreamMode.Write);
                cryptoStream.Write(byteArray, 0, byteArray.Length);
                cryptoStream.FlushFinalBlock();
                return Encoding.UTF8.GetString(memoryStream.ToArray());
            }

            catch (Exception ex)
            {
                string message = ex.Message;

            } 

Я прочитал много статей о проблеме некоторые сообщения говорят о решении:

text = text.Replace(" ", "+") и это не устраняет мою проблему вообще

моя строка: 3DZF/NZpp0yuQ=3D пожалуйста, мне нужна помощь, чтобы исправить эту проблему.

ИЗМЕНИТЬ

  • Если есть какие-либо изменения или улучшения этого класса, чтобы сделать это работать лучше или безопаснее или избегать любые возможные проблемы, подобные этому, i будем благодарны.
  • Если вместо этого есть чередующиеся классы, больше безопасны и не делают эти проблемы, буду благодарен.
  • Я использую этот класс в небольшом приложение, используемое для проверки почты.

EDIT:

Decoding the querystring values is done already when it parsed into the Request.

qaru.site/info/428650/...

4b9b3361

Ответ 1

Чтобы решить проблемы, которые вам нужны, чтобы скопировать кодировку и затем декодировать всю готовую строку encode-base64, зависит от того, где вы ее используете.

Если, например, вы используете его на url (или запросе), где, вероятно, это место, которое вы собираетесь использовать, тогда вам нужно Кодировать URL-адрес, прежде чем использовать его, расшифруйте URL-адрес, прежде чем вы его вернете. Причина в том, что вам нужно избегать смешивания тех же символов, что и URL-адрес в качестве символа кода, с зашифрованными символами.

В любом случае, вот код, который решает вашу проблему (и я использую по той же причине):

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

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


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

пс У меня такая же проблема, и попробуйте, как вы говорите, замените "+" и другие, но в конце это то, что заставляет это работать.

Не забудьте удалить text = text.Replace("", "+" ) и другие манипуляции с шифрованием из вашего кода, просто зашифруйте и расшифруйте.

Ответ 2

string imag = img;
imag = imag.Replace("\", "");
int c = imag.Length % 4;
if ((c) != 0)
    imag = imag.PadRight((imag.Length + (4 - c)), "=");
[] converted = Convert.FromBase64String(imag);
using (System.IO.MemoryStream vstream = new System.IO.MemoryStream(converted)) {
    return Image.FromStream(vstream);
}