Как открыть файлы, отправленные мне в "конверте документа"?
Я только что получил электронное письмо, чей 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, я просто не знаю, как именно.
4 ответа
Сегодня я получил один из этих документов.
Поскольку объяснение того, что не так с техподдержкой, казалось, заняло больше времени, чем попытка извлечь его самостоятельно, я создал небольшой скрипт на python для извлечения и декодирования документа pdf, который был встроен в файл sig.
То есть, предполагая, что существует один прикрепленный файл PDF, и формат файла sig такой же, как у меня.
Я надеюсь, что кто-то найдет это полезным.
import base64
import xml.etree.ElementTree as ET
import sys
def decode(infile, outfile):
tree = ET.parse(infile)
xmlns = '{http://www.w3.org/2000/09/xmldsig#}'
b64 = tree.find("./SignaturePackage/{0}Signature/{0}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 {0}'.format(outfile))
Я создал суть для этого сценария.
Вам нужно установить python 3.x, поместить файл sig и скрипт python в одну папку (или указать путь к файлу скрипта) и выполнить его следующим образом:
python unpack.py <sig_filename>
Это создаст файл с именем out.pdf в той же папке.
Вот элементарный скрипт, который вы можете использовать в 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.
Возможно, слишком поздно, но если вы получили этот файл из израильской судебной системы (נט המשפט), то здесь они дают ссылку ( эту ссылку) на программу Windows, которая открывает его.
Использование 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 - что один должен сказать вам, что это не файл, который вы должны открыть как таковой.