Недопустимая длина массива знаков base 64 справки бк что

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

как говорится в названии, я получаю:

недопустимая длина для основания-64 символа
матрица.

Я читал об этой проблеме здесь, и кажется, что
предложение состоит в том, чтобы сохранить ViewState в SQL, если он большой. Я
использование мастера с большим количеством сбора данных, так что шансы
есть ли у меня видовое состояние большое. Но, прежде чем я перейду к » store-in-DB»
решение, может быть, кто-нибудь может взглянуть и сказать мне, если у меня есть
другие варианты?

I построить письмо для доставки, используя следующий метод:

метод шифрования выглядит так:

вот как выглядит HTML в hotmail:

Пожалуйста, нажмите на ссылку ниже или
вставьте его в браузер для проверки
почтовый ящик.

на приемном конце, верифицированная Почта.aspx.на странице cs есть строка:

вот геттер для UserNameToVerify:

и вот метод GetQueryStringValue:

и метод расшифровки выглядит так:

можно ли исправить эту ошибку с помощью исправления кода или я должен хранить ViewState в базе данных?

4 ответов:

длина строки в кодировке base64 всегда кратна 4. Если это не кратно 4, то = символы добавляются до тех пор, пока это не будет. Строка запроса формы ?name=value проблемы, когда value содержит = charaters (некоторые из них будут отброшены, я не помню точное поведение). Вы можете быть в состоянии уйти с добавлением правильного числа = символы перед выполнением декодирования base64.

вы можете найти это значение UserNameToVerify имеет «+» изменился на » » так что вам может понадобиться сделать что-то вроде этого:

это должно получить правильную длину;

конечно, назвав UrlEncode (как в ответе LukeH) должно сделать все это спорным.

Я думаю, что вам просто нужно URL-encode ваша строка Base64, когда вы включаете ее в строку запроса.

кодировка base64 использует некоторые символы, которые должны быть закодированы, если они являются частью строки запроса (а именно + и / , а может = тоже). Если строка не правильно закодирована, то вы не сможете успешно декодировать ее на другом конце, следовательно, ошибки.

можно использовать HttpUtility.UrlEncode способ кодирования строку в base64:

Читайте также:  Заявление об индексации взысканных судом денежных сумм что это

Я еще не достаточно авторитетен, чтобы выдвигать или комментировать, но ответ LukeH был для меня на месте.

поскольку шифрование AES является стандартом для использования сейчас, он создает строку base64 (по крайней мере, все реализации шифрования/дешифрования, которые я видел). Эта строка имеет длину, кратную 4 (строка.длина % 4 = 0)

строки, которые я получал, содержали + и = в начале или конце, и когда вы просто объедините это в строку запроса URL, она будет выглядеть правильно (для например, в электронном письме, которое вы создаете), но когда ссылка следует, и страница .NET получает ее и помещает ее в это.Страница.Запрос.QueryString, эти специальные символы исчезнут, и ваша длина строки не будет кратна 4.

Как специальные символы в передней части строки (например: +), а также = в конце, вы не можете просто добавить некоторые = чтобы компенсировать разницу, как вы изменяете текст шифра таким образом, что не соответствует тому, что было на самом деле в строке исходная строка запроса.

Итак, обертывание текста шифра с помощью HttpUtility.URLEncode (не HtmlEncode) преобразует не буквенно-цифровые символы таким образом, что .NET анализирует их обратно в исходное состояние, когда он intepreted в коллекцию querystring.

хорошо, что нам нужно только сделать URLEncode при создании строки запроса для URL. На входящей стороне, он автоматически переводится обратно в исходную строку значение.

мое первоначальное предположение, не зная данных будет то, что UserNameToVerify не кратно 4 в длину. Проверьте FromBase64String на msdn.

Источник

Что вызывает эту » недопустимую длину для массива символов Base-64″

у меня очень мало, чтобы идти дальше. Я не могу воспроизвести это локально, но когда пользователи получают ошибку, я получаю автоматическое уведомление об исключении электронной почты:

Я склонен думать, что есть проблема с данными, которые назначаются viewstate. например:

трудно угадать источник ошибки, не будучи в состоянии воспроизвести ошибку локально.

Если у кого-то был опыт работы с этой ошибкой, я очень хотелось бы знать, что вы выяснили.

12 ответов

Я видел эту ошибку, вызванную сочетанием хорошего размера viewstate и агрессивных устройств фильтрации контента/брандмауэров (особенно при работе с учебными заведениями K-12).

мы работали вокруг него, сохраняя Viewstate в SQL Server. Прежде чем идти по этому маршруту, я бы рекомендовал попытаться ограничить использование viewstate, не сохраняя в нем ничего большого и отключая его для всех элементов управления, которые в нем не нуждаются.

Читайте также:  Заявление на бланке установленного образца что это такое

после того, как urlDecode обрабатывает текст, он заменяет все символы ‘ + ‘на». таким образом, ошибка. Вы должны просто вызвать это утверждение, чтобы сделать его base 64 совместимым снова:

Я предполагаю, что что — то слишком часто кодируется или декодируется-или что у вас есть текст с несколькими строками.

строки Base64 должны быть кратны 4 символам в длину-каждые 4 символа представляют 3 байта входных данных. Каким-то образом данные состояния представления передаются обратно ASP.NET поврежден-длина не кратна 4.

вы регистрируете агент пользователя, когда это происходит? Интересно, может, это какой-нибудь дурно воспитанный браузер. другой возможно, что есть прокси, делающий непослушные вещи. Аналогично попробуйте зарегистрировать длину содержимого запроса, чтобы вы могли видеть, происходит ли это только для больших запросов.

здесь qs любая строка в кодировке base64

Как упоминали другие, это может быть вызвано тем, что некоторые брандмауэры и прокси-серверы препятствуют доступу к страницам, содержащим большой объем данных ViewState.

ASP.NET 2.0 представил механизм Чанкинга ViewState который разбивает ViewState на управляемые куски, позволяя ViewState проходить через прокси / брандмауэр без проблем.

чтобы включить эту функцию, просто добавьте следующую строку в ваш веб.конфиг файл.

Это должно не можно использовать в качестве альтернативы уменьшению размера ViewState, но это может быть эффективной остановкой против ошибки «недопустимая длина для массива символов Base-64» в результате агрессивных прокси и тому подобное.

это не ответ, К сожалению. После того, как я столкнулся с прерывистой ошибкой в течение некоторого времени и, наконец, был раздражен достаточно, чтобы попытаться исправить это, я еще не нашел исправления. Я, однако, определил рецепт воспроизведения моей проблемы, который может помочь другим.

в моем случае это исключительно проблема localhost, на моей машине dev, которая также имеет БД приложения. Это .Net приложение 2.0 я редактирую с VS2005. 64-разрядная машина Win7 также имеет VS2008 и .NET 3.5 установленный.

вот что будет генерировать ошибку, из различных форм:

  1. загрузите новую копию формы.
  2. ввести некоторые данные, и/или передачи с любым из элементов управления формы. Пока нет существенной задержки, повторяйте все, что хотите, и ошибок не возникнет.
  3. подождите немного (1 или 2 минуты, может быть, не более 5) и попробуйте другую обратную передачу.
Читайте также:  100 дней до приказа когда выходит приказ

минуту или две задержки «ожидание localhost» и затем» соединение было сброшено » браузером и global.asax журналы ловушек ошибок приложений:

в этом случае это не размер viewstate, а что-то связанное с кэшированием страницы и/или viewstate, которое, кажется, кусает меня. Настройка

параметры enableEventValidation=»false» и viewStateEncryption=»Never» на Web.config поведение не изменилось. Как и установка maxPageStateFieldLength к чему-то скромному.

взгляните на свои HttpHandlers. Я заметил некоторые странные и совершенно случайные ошибки за последние несколько месяцев после того, как я реализовал инструмент сжатия (RadCompression от Telerik). Я замечал ошибки, такие как:

    .Сеть.HttpException: невозможно проверить данные.

  • .Сеть.HttpException: клиент отключен.—> Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.ViewStateException: Недопустимый состояние представления.
    • .FormatException: недопустимая длина для массива символов Base-64.

  • .Сеть.HttpException: клиент отключен. —> Система.Сеть.ПОЛЬЗОВАТЕЛЬСКИЙ ИНТЕРФЕЙС.ViewStateException: недопустимое viewstate.
  • Я об этом пишет на моем блоге.

    Это из-за огромного состояния представления, в моем случае мне повезло, так как я не использовал viewstate. Я просто добавил enableviewstate=»false» на теге формы и состоянии просмотра пошло от 35k до 100 символов

    во время первоначального тестирования на членство.ValidateUser с SqlMembershipProvider, я использую алгоритм хэша (SHA1) в сочетании с солью, и, если я изменил длину соли на длину, не делимую на четыре, я получил эту ошибку.

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

    Как сказал Джон Скит, строка должна быть кратна 4 байтам. Но я все еще получал ошибку.

    по крайней мере, он был удален в режиме отладки. Поставьте точку останова на Convert.FromBase64String() затем шаг через код. Чудесным образом, ошибка исчезла для меня 🙂 это, вероятно, связано с состояниями просмотра и аналогичными другими проблемами, о которых сообщали другие.

    кроме решение@jalchr это помогло мне, я обнаружил, что при вызове ATL::Base64Encode из приложения c++ для кодирования содержимого, которое вы передаете ASP.NET webservice, вам нужно что-то еще. В дополнение к

    С решение@jalchr, вы и должны убедиться, что вы не используйте ATL_BASE64_FLAG_NOPAD флаг ATL::Base64Encode :

    Источник

    Поделиться с друзьями
    МальтаВиста