Преобразование документа из базы 64 дает ошибку

Для моего проекта пользователь отправляет мне кодированный код base64. Мне нужно конвертировать в pdf документ.

Я использую приведенный ниже код для того же.

string AsBase64String = "base64code";
byte[] tempBytes = Convert.FromBase64String(AsBase64String);
File.WriteAllBytes(@"C:\d\hh.pdf", tempBytes);

и это работает успешно, но в некоторых случаях он генерирует PDF. При открытии pdf показывает, что формат недействителен.

Я использую тот же код на указанном ниже онлайн-сайте.

http://www.freeformatter.com/base64-encoder.html

Вставил код и расшифровал его и сохранил как файл и попробуй открыть в pdf. Это дало ту же ошибку. Затем я открываю файл в блокноте, копирую код внутрь и снова расшифровываю его на указанном выше веб-сайте. Затем сохраните его как файл. Когда я открываю второй файл, он успешно открывается.

Шаги, которые я сделал

  1. Взял код base64 с клиента и расшифровал его с помощью веб-сайта.
  2. взял расшифрованный код и снова расшифровал
  3. затем сохранил код и открыл его, и он успешно открылся.

но в большинстве случаев сначала само декодирование успешно открывается в pdf. В редких случаях требовалось двукратное декодирование.

В чем тут может быть подвох. Я новичок в этом декодировании base64. Пожалуйста, пролейте свет на этот вопрос


person Dravid    schedule 16.03.2016    source источник
comment
Ну, очевидно, что человек, который прислал вам файл, сделал ошибку и закодировал его дважды. Исправьте это, и ваша проблема исчезнет. Кроме того, почему вы передаете файлы, закодированные в base64? Надеюсь, вы делаете это не из соображений безопасности...   -  person Rob    schedule 16.03.2016
comment
@ Роб согласен с твоей точкой зрения. но это исходит от многих людей. Есть ли способ определить, сколько раз он кодируется из строки, которую мы получаем?   -  person Dravid    schedule 16.03.2016
comment
Нет, не совсем. Вы бы прочитали спецификацию для PDF и проверили заголовки файла, чтобы определить, является ли он действительным файлом PDF. Или используйте для этого библиотеку. Тем не менее, проблема на другом конце, поэтому проблема должна быть устранена там. Что, если они закодируют это 100 раз? Не могли бы вы постоянно декодировать его, пока не найдете действительный файл PDF (который на самом деле может не существовать?). Кажется, это простой способ DOS-сервиса.   -  person Rob    schedule 16.03.2016
comment
@Rob, мы передаем файлы, закодированные в base64, потому что это стандартный протокол xml, за которым следует проект ... он проходит через схему xml   -  person Dravid    schedule 16.03.2016
comment
@rob Я пытался прочитать заголовок, чтобы понять формат файла ... но проблема в том, что пользователь не сохраняет эту информацию и в разделе заголовка :(   -  person Dravid    schedule 16.03.2016
comment
Я имел в виду информацию заголовка в файле, а не веб-запрос. Кроме того, см. здесь - Определить правильность файла PDF (заголовок PDF) < /а>   -  person Rob    schedule 16.03.2016
comment
@Rob спасибо .. используя ITextLibrary, я могу проверить действительный pdf .. но следующий pblm, если он не сработает, как я составлю вторую строку из текущего base64, чтобы сделать правильный pdf   -  person Dravid    schedule 16.03.2016
comment
Вы просто декодируете полученную строку. Найдите C# convert byte[] to string и, если вы все еще застряли, опубликуйте новый вопрос (но на самом деле вы должны найти ответ на него в SO - есть много решений).   -  person Rob    schedule 16.03.2016
comment
@Rob то, что нужно, это bas64->base64->pdf .. извините, если это сбивает с толку   -  person Dravid    schedule 16.03.2016
comment
Да - 1. Вы бы загрузили исходный файл в строку. 2. Вы декодируете строку. 3. У вас есть byte[]. 4 Проверьте PDF. 5 Недействительно? Преобразуйте byte[] в string. Вернитесь к шагу 2. Здесь не хватает только преобразования byte[] в string.   -  person Rob    schedule 16.03.2016
comment
@Rob, если вы можете поставить это как ответ, я могу отметить это .. это решило мою проблему .. большое спасибо   -  person Dravid    schedule 16.03.2016