Как открыть файлы, отправленные мне в «конверте документа»?

724
einpoklum

Я только что получил электронное письмо, чей X-Mailer - «X-Mailer: Microsoft CDO для Windows 2000». Он имеет в качестве вложения файл .sgn, содержимое которого представляет собой XML с одним полем, по-видимому, в формате PDF с кодировкой base64:

<DocumentEnvelope><SignaturePackage><Signature = xmlns=3D"http://www.w3.org/2000/09/xmldsig#"><SignedInfo><Canonicalizatio= nMethod Algorithm=3D"http://www.w3.org/TR/2001/REC-xml-c14n-20010315" = /><SignatureMethod = Algorithm=3D"http://www.w3.org/2000/09/xmldsig#rsa-sha1" /><Reference = URI=3D"#SignedDoc"><DigestMethod = Algorithm=3D"http://www.w3.org/2000/09/xmldsig#sha1" = /><DigestValue>MFV2XJ9rfjhGCyA948wKB741ChQ=3D</DigestValue></Reference></= SignedInfo><SignatureValue>aKHfEGfu2p9RdShv1Vv/kqC6gjdymojq0rQA+AU/hPocrr= VqMQk2wbbJD60jc8QPP0kPIo4vWqB1mVx5Y45HK0LFWxMDkJ2/CN8GcODEum2Mamn3W2j9tKV= 8JfJAexlW47LprDq99W9YwfpXusaEplCOErCRj/2dhnGc4SgZXxw=3D</SignatureValue><= KeyInfo><KeyValue><RSAKeyValue><Modulus>nz78eiuYN1Jmm5ND8xLLbJ9QTrBpjTMfv= h4mbmHbBSB7HSHU+7Izp5GCiyDAlmXa3JjqKBRjw2+OpwhsJf+KHPltKFKwOltTN9QJWS4HJm= H1xqF4VAuwvpp1tlJd1KP5WL/j9YCYigzEfZIAAUC2KiFlAxoR1mwz3alMR4v96h8=3D</Mod= ulus><Exponent>AQAB</Exponent></RSAKeyValue></KeyValue></KeyInfo><Object = Id=3D"SignedDoc"><DocumentOriginName = xmlns=3D"">ecd20f25-95b3-4dc3-b8e6-fc62d23db259</DocumentOriginName><Docu= mentExtension xmlns=3D"">pdf</DocumentExtension><DocumentCreationDate = xmlns=3D"">2014-02-27T22:10:27.4320656+02:00</DocumentCreationDate><Docum= entContent = xmlns=3D"">JVBERi0xLjQNJeLjz9MNCjMgMCBvYmoNPDwvQ291bnQgMS9LaWRzWzQgMCBSXS= 9QYXJlbnQgMiAwIFIgDS9UeXBlL1BhZ2VzPj4NZW5kb2JqDTQgMCBvYmoNPDwvQXJ0Qm94WzA= 

(... и т. д. и т. д.)

P9fdsc3jL4yg7at7G488BKcqQbpnZDkhXFsfhc/VIuPexfElgnf2oagaf/QjiZHy+ganiZcAH= dFFFrN6xYK5n0JL5g330NKzD5CHBS8X1civ8VUAKdWjgI8pm1rFsm4v20SwIp/81OH1w=3D=3D= </CertBase64></Certificate></SignaturePackage></DocumentEnvelope> 

Если я копирую только часть DocumentContent и декодирую ее с помощью base64, я вижу заголовок PDF 1.3, но некоторые декодеры задыхаются от этого, и в любом случае я не могу получить работающий PDF от этой вещи. Так:

  • Как я могу вручную извлечь файл PDF оттуда?
  • Существует ли отдельный инструмент для извлечения файлов из таких почтовых сообщений или из файлов .sgn?
  • Есть ли расширение Thunderbird, которое обрабатывает их и представляет PDF как обычное вложение?

Примечания :

  • Файл был автоматически отправлен платформой Net Ha-Mishpat израильских судов. Я могу связаться с судами, но у них нет технически грамотных людей, и я не могу связаться с подрядчиком по программному обеспечению, которого они использовали.
  • Я знаю людей, которым в прошлом удавалось извлекать декодированные файлы из этих .sgn, я просто не знаю, как именно.
7

4 ответа на вопрос

2
MasterAM

Я получил один из этих документов сегодня.

Так как объяснение того, что не так с техподдержкой, казалось, заняло больше времени, чем попытка извлечь его самостоятельно, я создал небольшой скрипт на python для извлечения и декодирования документа pdf, который был встроен в файл sig .

То есть, предполагая, что существует один прикрепленный файл PDF, а формат файла sig такой же, как у меня.

Я надеюсь, что кто-то найдет это полезным.

import base64 import xml.etree.ElementTree as ET import sys   def decode(infile, outfile): tree = ET.parse(infile) xmlns = '' b64 = tree.find("./SignaturePackage/Signature/Object/DocumentContent".format(xmlns)).text txt = base64.b64decode(b64)  with open(outfile, 'bw+') as f: f.write(txt)  if __name__ == "__main__": if len(sys.argv) < 2: print('usage: python unpack.py <input_filename>') exit(1) infile = sys.argv[1] outfile = 'out.pdf' decode(infile, outfile) print('Done. Result saved to '.format(outfile)) 

Я создал суть для этого сценария.

Вам нужно установить python 3.x, поместить файл sig и скрипт python в одну папку (или указать путь к файлу сценария) и выполнить его следующим образом:

python unpack.py <sig_filename>

Это создаст файл с именем out.pdf в той же папке.

Разве вы не должны декодировать из стандартного ввода в стандартный вывод? Или хотя бы только декодировать из файла, если файл указан? einpoklum 9 лет назад 0
Использование имени файла в качестве аргумента кажется достаточно разумным. Нет необходимости использовать стандартный ввод / вывод. Это также более надежное IMHO, поскольку вы можете предоставить больше аргументов и упростить извлечение нескольких файлов. Я надеюсь, что вам не нужно так часто, хотя. MasterAM 9 лет назад 0
Не то чтобы это имело такое большое значение, но - по-вашему, это декодирование не может быть передано по каналу (кроме как путем создания именованных каналов). Не очень дружелюбный ... einpoklum 9 лет назад 0
Это правильно, но опять же, это утилита 20-LoC, которую можно легко адаптировать :) Вы, вероятно, должны проверить, работает ли она, и сообщить мне, если есть какие-либо проблемы. MasterAM 9 лет назад 0
Я буду, в следующий раз, когда я получу один из них. Я не думаю, что у меня есть один спасенный. einpoklum 9 лет назад 0
2
einpoklum

Вот элементарный скрипт, который вы можете использовать в Unix-подобных системах (и, возможно, в Windows тоже с небольшими изменениями), чтобы извлечь PDF-файл из конверта документа; Я называю это sgn2pdf(так как файл конверта doc имеет расширение sgn). Его интерфейс командной строки

sgn2pdf [INPUT_FILENAME] [OUTPUT_FILENAME] 

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

Источник:

#!/bin/bash # # Extract a PDF file from an Israeli courts' .sgn PDF document envelope  exec 3<&0 # tie (new) file descriptor 3 to what is currently the standard input exec 4>&1 # tie (new) file descriptor 4 to what is currently the standard output  if [[ $# > 0 ]]; then exec 3<$1  shift fi if [[ $# > 0 ]]; then exec 4>$1 shift fi exec <&3 >&4 sed -r 's/^.*<DocumentContent[^>]*>//; s/<\/Document.*$//;' | base64 -d -i >&4 

base64Декодер является частью GNU coreutilsпакета и должны быть доступны в любом дистрибутиве Linux.

0
Debra

Использование CDO 200 и конверта документа указывает на то, что электронное письмо, скорее всего, было отправлено автоматически или программно, то есть через сценарий, вне доступа или каким-либо другим способом через SMTP и программу, совместимую с CDO (не обычный почтовый клиент).

Файл SGN вряд ли будет настоящим файлом SGN, который является файлом «Sierra Print Artist»; кажется более вероятным, что кто-то использовал расширение вручную для файла подписи.

Я не верю, что этот файл должен был быть тем вложением, которое вы должны были открыть. Кажется, гораздо более вероятно, что файл, который вы видите, включен в электронное письмо как способ для отправителя показать его как «подписанный», когда он генерируется автоматически. Поскольку PDF-файл встроен в XML-файл, скорее всего, нет расширения, которое бы автоматически расшифровывало раздел вложения, который вы считаете PDF-файлом. Вы можете попробовать скопировать весь раздел, а затем расшифровать его и сохранить декодированный текст в текстовом редакторе, совместимом с юникодом, а затем посмотреть, открывается ли он как читаемый PDF-файл.

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

Вы пытались связаться с отправителем, чтобы узнать, имеет ли вложение какое-либо значение? Мне кажется довольно очевидным, что это просто файл с подписью. Заголовок говорит вам, что алгоритм, используемый для генерации подписи, находится по адресу http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd#rsa-sha1 - что один должен сказать вам, что это не файл, который вы должны открыть как таковой.

Как я уже сказал, я скопировал раздел контента и расшифровал его с частичным успехом. Это 3-страничный PDF - но я не могу понять содержание правильно. Должно быть что-то в кодировке файлов sgn, или что-то вроде заголовка / трейлинга, или что-то в этом роде. einpoklum 10 лет назад 0
Если это файл, который вы должны открыть, отправьте его отправителю. Но все, что вы описываете, похоже, указывает на файл, который является частью подписи и не предназначен для открытия таким образом. Способ его отправки определяет, можно ли открыть его как стандартное вложение. «Конверт документа» относится только к тому, как обернуть сообщение для отправки с CDO через SMTP. Debra 10 лет назад 0
Знаете ли вы какие-либо программные инструменты, которые обрабатывают такие «конверты»? einpoklum 10 лет назад 0
0
yohbs

Probably too late, but if you got this file from the Israeli court system (נט המשפט), then here they give a link (this link) to a windows program that opens it.

Хммм. Сначала они рассылают электронные письма, требующие MS Outlook, а затем предлагают «помочь» вам - при условии, что вы используете Windows. Замечательно. В любом случае - не твоя вина, спасибо. einpoklum 8 лет назад 1
@einpoklum Я согласен (я запускаю Ubuntu и должен был использовать ноутбук моей жены). Но эй - по крайней мере, они не используют голубей ... yohbs 8 лет назад 0

Похожие вопросы