Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2022(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 7 раз
|
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 не отрабатывает..
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2022(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 7 раз
|
Автор: Denisekat  Впечатление, что hashedData.DataEncoding = pycades.CADESCOM_BASE64_TO_BINARY не отрабатывает..
Может это быть из-за того что pycades встал криво? Как прочекать всё ли ему хватает? Или он возвращает внутренние ошибки?
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 14,162   Сказал «Спасибо»: 618 раз Поблагодарили: 2389 раз в 1880 постах
|
Пример со строкой из docs не работает? |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 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)
|
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 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() |
|
 2 пользователей поблагодарили Санчир Момолдаев за этот пост.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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 и при проверке через инструменты КриптоПро)
|
|
|
|
|
|
Статус: Сотрудник
Группы: Администраторы, Участники Зарегистрирован: 03.12.2018(UTC) Сообщений: 1,244  Сказал(а) «Спасибо»: 106 раз Поблагодарили: 300 раз в 278 постах
|
Значит прикладывайте полностью и питон и js Где-то ошибка. Либо с set-ом, либо с чем-то еще |
|
|
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 30.08.2022(UTC) Сообщений: 34
Сказал(а) «Спасибо»: 7 раз
|
Автор: Санчир Момолдаев  Значит прикладывайте полностью и питон и js Где-то ошибка. Либо с set-ом, либо с чем-то еще Спасибо! Приложено.  code.zip (525kb) загружен 11 раз(а).
|
|
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close