Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.12.2024(UTC) Сообщений: 37  Сказал(а) «Спасибо»: 26 раз Поблагодарили: 1 раз в 1 постах
|
Добрый день, есть задача расшифровать полученный в ответ xml-файл...
Пробую сделать расшифровку, с помощью Pycades, метода StreamDecrypt. Вот код:
''' import pycades import base64
data = open('.../test.xml', "rb").read() data = base64.b64encode(data)
store = pycades.Store() envelopedData = pycades.EnvelopedData()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED) certs = store.Certificates cert = certs.Item(1)
Content = envelopedData.StreamDecrypt(data.decode('utf-8'), False) content = envelopedData.Content print(content) '''
При расшифровке не вылетает ошибок, но print (пытаюсь вывести расшифрованные данные в консоль) выдает просто пустую строку.... Может быть я что-то не так делаю? Подскажите пожалуйста, как я могу получить расшифрованные данные (желательно их конечно так же выгружать в xml). Спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
Здравствуйте. А без использования pycades - файл расшифровывается? Decrypt был проверен из примера? Вопросы... Почему файл с расширением .xml? data = base64.b64encode( data) data. decode('utf-8') видимо специфика языка? |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.12.2024(UTC) Сообщений: 37  Сказал(а) «Спасибо»: 26 раз Поблагодарили: 1 раз в 1 постах
|
1. расшифровывать пробовал только через pycades... 2. если открыть просто в редакторе, то в файле нераспознанные вкрапления.. пример: 0� *�H�� ��0�10 *�0� *�H�� ��$��g<?xml version="1.0" encoding="windows-1251"?> <product> <prequest> <req> <InquiryReq> 3. потому что изначально отправлял в запросе файл xml и ответ сохранил так же в xml (пришли данные по opt/cprocsp/bin/amd64/curl) 4. главный вопрос, почему при расшифровке выдает пустую строку??? '''' читаю файл в байтах, далее перевожу в 64 и декодирую в utf-8. Если делаю неправильно, поправьте плиз)) data = base64.b64encode(data) data.decode('utf-8') видимо специфика языка? ''' Спасибо) Отредактировано пользователем 24 марта 2025 г. 13:12:51(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
Автор: egow2806  1. расшифровывать пробовал только через pycades... 2. если открыть просто в редакторе, то в файле нераспознанные вкрапления.. пример: 0� *�H�� ��0�10 *�0� *�H�� ��$��g<?xml version="1.0" encoding="windows-1251"?> <product> <prequest> <req> <InquiryReq>
3. потому что изначально отправлял в запросе файл xml и ответ сохранил так же в xml (пришли данные по opt/cprocsp/bin/amd64/curl) 4. главный вопрос, почему при расшифровке выдает пустую строку???
'''' читаю файл в байтах, далее перевожу в 64 и декодирую в utf-8. Если делаю неправильно, поправьте плиз))
data = base64.b64encode(data) data.decode('utf-8')
видимо специфика языка? '''
Спасибо) Так это не зашифрованный файл, это подписанный файл с присоединенной ЭП. А не показывает всё здесь - потому что это asn1 структура. Здесь https://lapo.it/asn1js/ - виден внутри подписанный xml? Через Инструменты КриптоПРО или любое ПО, которое умеет проверять ЭП - только указать имя файла как file.xml.sig и на выходе получится file.xml, уже читаемый. А программно - смотреть примеры по проверке ЭП. |
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
|
|
 1 пользователь поблагодарил Андрей * за этот пост.
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.12.2024(UTC) Сообщений: 37  Сказал(а) «Спасибо»: 26 раз Поблагодарили: 1 раз в 1 постах
|
Понял, спасибо... Да файл содержит оригинал. попробовал сделать проверку подписи вот так: ''' import pycades import base64 signedata = pycades.SignedData() signedata.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY sgn = open('.../test.xml.sig', "rb").read() encs = base64.b64encode(sgn) signedata.VerifyCades(encs.decode('utf-8'), pycades.CADESCOM_CADES_BES) ''' но почемуто выдает ошибку: Exception: Internal error. (0x8009200E) Отредактировано пользователем 24 марта 2025 г. 14:42:33(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
encs.decode('utf-8') зачем?
в коде же явно указано - прочитать данные (байты, верно?), encs = base64.b64encode(sgn) - закодировать байты в строку encs
при этом библиотека предупреждена: signedata.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY - собираемся передать на вход base64 и нужно в памяти декодировать (получить ASN1, исходные байты из файла)
и далее всего лишь требуется передать строку эту. VerifyCades(encs, pycades.CADESCOM_CADES_BES) |
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 26.12.2024(UTC) Сообщений: 37  Сказал(а) «Спасибо»: 26 раз Поблагодарили: 1 раз в 1 постах
|
если так сделать то выдает ошибку: TypeError: argument 1 must be str, not bytes.. Проверку удалось реализовать если поставить тип подписи PKCS7: signedata.VerifyCades(encs.decode('utf-8'), pycades.CADESCOM_PKCS7_TYPE) вот так проверка проходит успешно... единственное жалко что нельзя объекты выделить: подписант, время подписи итд... видимо буду использовать связку pycades+asn1crypto --- pycades для проверки, а asn1crypto для вытягивания информации о подписи и подписантах.. Спасибо. Отредактировано пользователем 24 марта 2025 г. 15:05:52(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
Автор: egow2806  если так сделать то выдает ошибку: TypeError: argument 1 must be str, not bytes..
Проверку удалось реализовать если поставить тип подписи PKCS7: signedata.VerifyCades(encs.decode('utf-8'), pycades.CADESCOM_PKCS7_TYPE) вот так проверка проходит успешно... единственное жалко что нельзя объекты выделить: подписант, время подписи итд... видимо буду использовать связку pycades+asn1crypto --- pycades для проверки, а asn1crypto для вытягивания информации о подписи и подписантах..
Спасибо. Так в encs же строка? Или что? Файл присылается с pkcs7 ? |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,732   Сказал «Спасибо»: 574 раз Поблагодарили: 2303 раз в 1804 постах
|
print(encs) - разве не base64 выведет? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close