Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход. Новые регистрации запрещены.

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline egow2806  
#1 Оставлено : 24 марта 2025 г. 12:06:52(UTC)
egow2806

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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). Спасибо.
Offline Андрей *  
#2 Оставлено : 24 марта 2025 г. 12:16:52(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,732
Мужчина
Российская Федерация

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Здравствуйте.

А без использования pycades - файл расшифровывается?
Decrypt был проверен из примера?
Вопросы...
Почему файл с расширением .xml?


data = base64.b64encode(data)
data.decode('utf-8')

видимо специфика языка?

Техническую поддержку оказываем тут
Наша база знаний
Offline egow2806  
#3 Оставлено : 24 марта 2025 г. 13:12:05(UTC)
egow2806

Статус: Активный участник

Группы: Участники
Зарегистрирован: 26.12.2024(UTC)
Сообщений: 37
Российская Федерация

Сказал(а) «Спасибо»: 26 раз
Поблагодарили: 1 раз в 1 постах
1. расшифровывать пробовал только через pycades...
2. если открыть просто в редакторе, то в файле нераспознанные вкрапления..
пример: 0� *�H��
��0�1 0
*�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)  | Причина: Не указана

Offline Андрей *  
#4 Оставлено : 24 марта 2025 г. 14:15:24(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,732
Мужчина
Российская Федерация

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
Автор: egow2806 Перейти к цитате
1. расшифровывать пробовал только через pycades...
2. если открыть просто в редакторе, то в файле нераспознанные вкрапления..
пример: 0� *�H��
��0�1 0
*�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, уже читаемый.


А программно - смотреть примеры по проверке ЭП.


Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 24.03.2025(UTC)
Offline Андрей *  
#5 Оставлено : 24 марта 2025 г. 14:18:06(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,732
Мужчина
Российская Федерация

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
pycades-samples/pycades-sign-verify
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Андрей * за этот пост.
egow2806 оставлено 24.03.2025(UTC)
Offline egow2806  
#6 Оставлено : 24 марта 2025 г. 14:37:44(UTC)
egow2806

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей *  
#7 Оставлено : 24 марта 2025 г. 14:48:57(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)
Техническую поддержку оказываем тут
Наша база знаний
Offline egow2806  
#8 Оставлено : 24 марта 2025 г. 15:05:01(UTC)
egow2806

Статус: Активный участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

Offline Андрей *  
#9 Оставлено : 24 марта 2025 г. 15:23:41(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 ?

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#10 Оставлено : 24 марта 2025 г. 15:25:33(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,732
Мужчина
Российская Федерация

Сказал «Спасибо»: 574 раз
Поблагодарили: 2303 раз в 1804 постах
print(encs) - разве не base64 выведет?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.