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

Уведомление

Icon
Error

2 Страницы<12
Опции
К последнему сообщению К первому непрочитанному
Offline Харчев Алексей  
#11 Оставлено : 27 сентября 2025 г. 8:17:11(UTC)
Харчев Алексей

Статус: Новичок

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

// ------------------------------------------------------------
Если подвести итог, ответы были странные и не по теме вопроса
Скорее всего, проблема в том, что python у меня запущен 64-bit, а библиотека cadescom.dll почему-то 32 битная
Видимо, никто никогда не слышал про эту библиотеку

Добавил пару записей в регистр Windows. И Python ее увидел, а результат опять не тотBrick wall

Строка Привет!
в 1С метод HashedData.Hash() вернул '03140EABA70458791E50611258DBD0241525641CB376A4ED0A5B46D295A0330E'
в PyCharm метод HashedData.Hash() вернул 'EC4F9A415F015A1CCCECEF8DC51266D9A3D87252DE5B4F5B2D42BA3DD1D421DE'

или это исключительно из-за битности...

Отредактировано пользователем 27 сентября 2025 г. 10:34:23(UTC)  | Причина: Не указана

Offline Андрей *  
#12 Оставлено : 27 сентября 2025 г. 11:37:39(UTC)
Андрей *

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

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

Сказал «Спасибо»: 599 раз
Поблагодарили: 2336 раз в 1833 постах
Автор: Харчев Алексей Перейти к цитате
// ------------------------------------------------------------
Если подвести итог, ответы были странные и не по теме вопроса
Скорее всего, проблема в том, что python у меня запущен 64-bit, а библиотека cadescom.dll почему-то 32 битная
Видимо, никто никогда не слышал про эту библиотеку

Добавил пару записей в регистр Windows. И Python ее увидел, а результат опять не тотBrick wall

Строка Привет!
в 1С метод HashedData.Hash() вернул '03140EABA70458791E50611258DBD0241525641CB376A4ED0A5B46D295A0330E'
в PyCharm метод HashedData.Hash() вернул 'EC4F9A415F015A1CCCECEF8DC51266D9A3D87252DE5B4F5B2D42BA3DD1D421DE'

или это исключительно из-за битности...


Если подвести итоги - Вы даже не удосужились свериться с моим хешем.
Удачи.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#13 Оставлено : 27 сентября 2025 г. 12:00:01(UTC)
Андрей *

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

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

Сказал «Спасибо»: 599 раз
Поблагодарили: 2336 раз в 1833 постах
Автор: Харчев Алексей Перейти к цитате
// ------------------------------------------------------------
Если подвести итог, ответы были странные и не по теме вопроса
Скорее всего, проблема в том, что python у меня запущен 64-bit, а библиотека cadescom.dll почему-то 32 битная
Видимо, никто никогда не слышал про эту библиотеку

Добавил пару записей в регистр Windows. И Python ее увидел, а результат опять не тотBrick wall

Строка Привет!
в 1С метод HashedData.Hash() вернул '03140EABA70458791E50611258DBD0241525641CB376A4ED0A5B46D295A0330E'
в PyCharm метод HashedData.Hash() вернул 'EC4F9A415F015A1CCCECEF8DC51266D9A3D87252DE5B4F5B2D42BA3DD1D421DE'

или это исключительно из-за битности...



в 1С:
03140EABA70458791E50611258DBD0241525641CB376A4ED0A5B46D295A0330E

получается, если хешировать (13 байт в hex):
D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 21

этот хеш можно "увидеть" в cms, если подписать: Привет!
на странице для тестирования плагина.


Напомню исходные байты:
CF F0 E8 E2 E5 F2 21

Отредактировано пользователем 27 сентября 2025 г. 12:04:09(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#14 Оставлено : 27 сентября 2025 г. 12:09:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 599 раз
Поблагодарили: 2336 раз в 1833 постах
т.к. не предоставлены результаты для public_bytes ... сам сертификат
и вариант от 1с - то далее изучать и передавать байты через base64, как указывал ранее.

Отредактировано пользователем 27 сентября 2025 г. 12:14:00(UTC)  | Причина: Не указана

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

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

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

Сказал «Спасибо»: 599 раз
Поблагодарили: 2336 раз в 1833 постах
Добрался до этого pythoncom ...






import pythoncom
import win32com.client as cl

pythoncom.CoInitializeEx(pythoncom.COINIT_APARTMENTTHREADED)
hashed_data = cl.Dispatch('CAdESCOM.HashedData')
hashed_data.Algorithm = 101
hashed_data.DataEncoding = 1
hashed_data.Hash("z/Do4uXyIQ==")
print( hashed_data.Value )


z/Do4uXyIQ== слово "Привет!" (hex: CF F0 E8 E2 E5 F2 21 )
и всё получилось как и ожидалось.


test.png (22kb) загружен 7 раз(а).

Отредактировано пользователем 28 сентября 2025 г. 1:47:49(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#16 Оставлено : 28 сентября 2025 г. 1:58:21(UTC)
Андрей *

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

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

Сказал «Спасибо»: 599 раз
Поблагодарили: 2336 раз в 1833 постах
hashed_data.DataEncoding = 1
это означает, что далее будут переданы данные, которые закодировали в base64 и в памяти библиотека декодирует и прохеширует.

Константы (если по ссылке нет времени смотреть и искать в docs):
CADESCOM_BASE64_TO_BINARY Кодировка BASE64. 0x01

cadescom_content_encoding_type



hashed_data.Algorithm = 101 = CADESCOM_HASH_ALGORITHM_CP_GOST_3411_2012_256 Алгоритм ГОСТ Р 34.11-2012.
cadescom_hash_algorithm

Техническую поддержку оказываем тут
Наша база знаний
Offline Харчев Алексей  
#17 Оставлено : 28 сентября 2025 г. 12:12:21(UTC)
Харчев Алексей

Статус: Новичок

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

действительно, для слова Привет!, если установить DataEncoding = 1
ответ на python 14987BD66D363BC93A7E3503323FFF77DF9EEE031F1EFBD1A5E988D00512E47A
ответ на 1c ....... 14987BD66D363BC93A7E3503323FFF77DF9EEE031F1EFBD1A5E988D00512E47A


что же не так с этими списками ...
это же просто списки из целых неотрицательных чисел в диапазоне [0..255]
ДанныеСертификата.Выгрузить() = [48, 130, 9, 90, 48, 130, 9, 7, 160, 3, 2, 1, 2, 2, 17, ... ]
в данном случае я не устанавливаю DataEncoding, по-умолчанию он равен нулю

res = cl.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_UI1, list(cert_bytes));
hashed_data.Hash(res); => '766687C854E28CB9030D063B71BB7453720FE0E1C71860980FA3ABC3BE50B012'

res = cl.VARIANT(pythoncom.VT_UI1, list(cert_bytes));
hashed_data.Hash(res); => '4EBE18898F46A8B13A4A52996C6B649A09F9BDFD4793E5E1F67A785380D65C92'

res = list(cert_bytes);
hashed_data.Hash(res); => '5A078C714334E4F98837094C3B9CEB850321F09B921C8C8156380697DB1E4A61'

res = np.array(list(cert_bytes), dtype=np.uint8).tolist();
hashed_data.Hash(res); => '5A078C714334E4F98837094C3B9CEB850321F09B921C8C8156380697DB1E4A61'

res = cl.VARIANT(pythoncom.VT_ARRAY | pythoncom.VT_UI1, list(cert_bytes));
hashed_data.Hash(res.value); => '5A078C714334E4F98837094C3B9CEB850321F09B921C8C8156380697DB1E4A61'

res = cl.VARIANT(pythoncom.VT_UI1, list(cert_bytes));
hashed_data.Hash(res.value); => '5A078C714334E4F98837094C3B9CEB850321F09B921C8C8156380697DB1E4A61'

Отредактировано пользователем 28 сентября 2025 г. 14:03:47(UTC)  | Причина: Не указана

Offline Андрей *  
#18 Оставлено : 28 сентября 2025 г. 14:52:38(UTC)
Андрей *

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

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

Сказал «Спасибо»: 599 раз
Поблагодарили: 2336 раз в 1833 постах
ДанныеСертификата.Выгрузить() = [48, 130, 9, 90, 48

В hex прям так?
А что мешает прочитать как бинарный файл и закодировать в base64 и получить правильную информацию.
А ответа на изначальный вопрос не получил - в чём смысл хеширования сертификата?
Чтобы что? Зачем эта производная? А далее какой код? Подписание документов?

У сертификата есть отпечаток - sha1, он и в атрибутах есть и вычисляется снаружи тоже без проблем.


Ещё раз icphasheddatadataencoding

Примечания
Цитата:
Данное свойство задает кодировку данных, передаваемых в метод Hash, и должно быть задано до того, как будет впервые вызван метод Hash. По умолчанию свойство имеет значение CADESCOM_STRING_TO_UCS2LE. Задание свойства DataEncoding сбрасывает состояние объекта.
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы<12
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.