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

Уведомление

Icon
Error

6 Страницы<12345>»
Опции
К последнему сообщению К первому непрочитанному
Offline Denisekat  
#21 Оставлено : 13 сентября 2022 г. 14:50:20(UTC)
Denisekat

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

Группы: Участники
Зарегистрирован: 30.08.2022(UTC)
Сообщений: 34

Сказал(а) «Спасибо»: 7 раз
Автор: Андрей * Перейти к цитате
Цитата:
Хэширую файл следующим образом:


Т.е. мой ответ не был понят?
До хеширования - указать алгоритм и DataEncoding.
https://docs.cryptopro.r...escom_class/cphasheddata
Algorithm = ADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
DataEncoding = CADESCOM_BASE64_TO_BINARY
Hash ( base64 данные )


В примерах задается только алгоритм, про DataEncoding надо догадаться :)

https://docs.cryptopro.ru/cades/pycades/pycades-samples/pycades-signhash-verifyhash
Offline Denisekat  
#22 Оставлено : 13 сентября 2022 г. 16:38:23(UTC)
Denisekat

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

Группы: Участники
Зарегистрирован: 30.08.2022(UTC)
Сообщений: 34

Сказал(а) «Спасибо»: 7 раз
Автор: Denisekat Перейти к цитате
Автор: Андрей * Перейти к цитате
Цитата:
Хэширую файл следующим образом:


Т.е. мой ответ не был понят?
До хеширования - указать алгоритм и DataEncoding.
https://docs.cryptopro.r...escom_class/cphasheddata
Algorithm = ADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
DataEncoding = CADESCOM_BASE64_TO_BINARY
Hash ( base64 данные )


Согласен, всё есть выше..

Добавил DataEncoding(Алгоритм до этого указывал) и убрал преобразование из b64:
Код:
with open(fpath, "rb") as f:
    f_to_base64 = base64.b64encode(f.read())
hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
hashedData.Hash(f_to_base64)
h_data = hashedData.Value # уходит на фронт


Вернувшийся .sig проверку все равно не проходит :(


Трэйсбэк:
Код:
datainb64: <class 'bytes'> 1598496
 hashedData.Hash(datainb64)
TypeError: argument 1 must be str, not bytes


Впечатление, что hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY не отрабатывает..
Offline Denisekat  
#23 Оставлено : 14 сентября 2022 г. 15:29:37(UTC)
Denisekat

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

Группы: Участники
Зарегистрирован: 30.08.2022(UTC)
Сообщений: 34

Сказал(а) «Спасибо»: 7 раз
Автор: Denisekat Перейти к цитате

Впечатление, что hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY не отрабатывает..

Может это быть из-за того что pycades встал криво? Как прочекать всё ли ему хватает? Или он возвращает внутренние ошибки?
Offline Андрей *  
#24 Оставлено : 14 сентября 2022 г. 15:30:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 618 раз
Поблагодарили: 2389 раз в 1880 постах
Пример со строкой из docs не работает?
Техническую поддержку оказываем тут
Наша база знаний
Offline Denisekat  
#25 Оставлено : 14 сентября 2022 г. 16:08:47(UTC)
Denisekat

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

Группы: Участники
Зарегистрирован: 30.08.2022(UTC)
Сообщений: 34

Сказал(а) «Спасибо»: 7 раз
Автор: Андрей * Перейти к цитате
Пример со строкой из docs не работает?

Если речь об этом примере, то он слегка оторван от задачи - подписывается строка(без перевода в b64), подписывается тут же(без передачи хэша - signer берется из сертификата на той же машине).
Попробовал сделать хэш из строки(как в доке), отправить значение(Value) этого хэша на фронт и после проверить вернувшийся .sig и объект hashedData:
Код:
_signedData = pycades.SignedData()
_signedData.VerifyHash(hashedData, signature, pycades.CADESCOM_CADES_BES)

Функция выплюнула: The hash value is not correct (0x80091007)
Offline Санчир Момолдаев  
#26 Оставлено : 14 сентября 2022 г. 20:28:00(UTC)
Санчир Момолдаев

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

Группы: Администраторы, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,244
Российская Федерация

Сказал(а) «Спасибо»: 106 раз
Поблагодарили: 300 раз в 278 постах
Автор: Denisekat Перейти к цитате


Впечатление, что hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY не отрабатывает..


вы забыли .decode()
Код:
hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
with open('data.txt', 'rb') as binary_data_file:
    content = base64.b64encode(binary_data_file.read()).decode()
hashedData.Hash(content)
Техническую поддержку оказываем тут
Наша база знаний
Offline Санчир Момолдаев  
#27 Оставлено : 14 сентября 2022 г. 20:44:00(UTC)
Санчир Момолдаев

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

Группы: Администраторы, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,244
Российская Федерация

Сказал(а) «Спасибо»: 106 раз
Поблагодарили: 300 раз в 278 постах
Автор: Denisekat Перейти к цитате
Автор: Андрей * Перейти к цитате
Пример со строкой из docs не работает?

Если речь об этом примере, то он слегка оторван от задачи - подписывается строка(без перевода в b64), подписывается тут же(без передачи хэша - signer берется из сертификата на той же машине).
Попробовал сделать хэш из строки(как в доке), отправить значение(Value) этого хэша на фронт и после проверить вернувшийся .sig и объект hashedData:
Код:
_signedData = pycades.SignedData()
_signedData.VerifyHash(hashedData, signature, pycades.CADESCOM_CADES_BES)

Функция выплюнула: The hash value is not correct (0x80091007)


дарю функцию хэширования:
Код:
# хэширование текстовых или байтовых данных
def gost_hash(data: Union[str, bytes, bytearray], encoding="utf-8") -> str:
    hashed_data = pycades.HashedData()
    hashed_data.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
    hashed_data.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
    if isinstance(data, str):
        data = bytes(data.encode(encoding))
    hashed_data.Hash(base64.b64encode(data).decode())
    hex_hash = hashed_data.Value
    byte_hash = bytes.fromhex(hex_hash)
    return base64.b64encode(byte_hash).decode()


если вы делаете SetHashValue то должны передать их в hex.
на фронте должен быть использован метод signhash()
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Санчир Момолдаев за этот пост.
Denisekat оставлено 16.09.2022(UTC), epermyakov оставлено 16.02.2024(UTC)
Offline Denisekat  
#28 Оставлено : 15 сентября 2022 г. 9:24:08(UTC)
Denisekat

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

Группы: Участники
Зарегистрирован: 30.08.2022(UTC)
Сообщений: 34

Сказал(а) «Спасибо»: 7 раз
Санчир, благодарю за поправку.
.decode() я использую, но вместе с кодировкой - убрал.
Код:
with open(fpath, "rb") as f:
    f_to_base64 = base64.b64encode(f.read()).decode() # было base64.b64encode(f.read()).decode("utf-8")

hashedData = pycades.HashedData()
hashedData.Algorithm = pycades.CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256
hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY
hashedData.Hash(f_to_base64)
h_data = hashedData.Value
byte_hash = bytes.fromhex(h_data) # добавил из подаренной функции :)
base64.b64encode(byte_hash).decode() # теперь уходит на фронт

Выглядит все отлично, только на выходе .sig по-прежнему не валиден - 0x80091007: Неправильное значение хеша(и в VerifyCades и при проверке через инструменты КриптоПро)
Offline Санчир Момолдаев  
#29 Оставлено : 15 сентября 2022 г. 10:36:53(UTC)
Санчир Момолдаев

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

Группы: Администраторы, Участники
Зарегистрирован: 03.12.2018(UTC)
Сообщений: 1,244
Российская Федерация

Сказал(а) «Спасибо»: 106 раз
Поблагодарили: 300 раз в 278 постах
Значит прикладывайте полностью и питон и js
Где-то ошибка. Либо с set-ом, либо с чем-то еще
Техническую поддержку оказываем тут
Наша база знаний
Offline Denisekat  
#30 Оставлено : 15 сентября 2022 г. 11:34:24(UTC)
Denisekat

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

Группы: Участники
Зарегистрирован: 30.08.2022(UTC)
Сообщений: 34

Сказал(а) «Спасибо»: 7 раз
Автор: Санчир Момолдаев Перейти к цитате
Значит прикладывайте полностью и питон и js
Где-то ошибка. Либо с set-ом, либо с чем-то еще


Спасибо! Приложено. code.zip (525kb) загружен 11 раз(а).
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
6 Страницы<12345>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.