|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||||||||||||||||
Как получить идентификатор алгоритма хеширования латиницей через CryptGetHashParam?24.03.2022, 16:11. Показов 2197. Ответов 18
Подскажите, пожалуйста, написал программу, которая хеширует данные из файла и выводит значение хеша и алгоритм хеширования (надо обязательно через функцию CryptGetHashParam, по заданию)
Вот несколько вариантов вывода, которые мне удалось найти в примерах в нете, но и тот и тот не выводят CALG_SHA, который я передавал в функцию CryptCreateHash. Возможно, он так и должен выводить что-то непонятное, я не знаю. Просто думал, что он мне вернет CALG_SHA, а он возвращает ромбик и букву А (первый способ вывести) или 48000 (второй способ вывести), может кто подскажет, в какой кодировке эта функция возвращает id алгоритма в буфер и как мне конвертировать значение буфера в латиницу и вывести на экран.
0
|
||||||||||||||||
| 24.03.2022, 16:11 | |
|
Ответы с готовыми решениями:
18
Как получить уникальный идентификатор девайса через SetupDiGetDeviceInterfaceDetail
Реализация алгоритма хеширования scrypt |
|
COM‐пропагандист
|
|
| 25.03.2022, 05:43 | |
|
Какая ещё кодировка, это не текстовые данные, не буквы, не строки, не символы, это двоичные данные. Вот у вас фильмы и фотокарточки хранятся не в тексте, а двоичными данными. Так и тут.
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||
| 25.03.2022, 10:38 [ТС] | ||
|
Но можно в итоге ответить на вопрос?) Как мне вывести данные из буфера, чтобы получить идентификатор алгоритма? Иначе зачем вообще существует параметр HP_ALGID для CryptGetHashParam, если он возвращает в буфер набор непонятных символов? В документации сказано, что возвращает в буфер идентификатор алгоритма, но во всем интернете нет ни 1 примера кода, где кто-то получает через эту функцию идентификатор алгоритма. Это действо само по себе, как мне кажется бесполезно. Потому что для получения через эту функцию идентификатора алгоритма, надо иметь дескриптор хеш-объекта, а если он у нас есть, то вероятно, мы его и создали в рамках программы и, получается, и так знаем алгоритм, который передавали в функцию создания дескриптора. Но по документации, возможность получить алгоритм есть, и мне нужно это сделать. Но как это сделать, я не знаю. 3й день ищу решение, все тщетно. МОЛЮ О ПОМОЩИ!
0
|
||
|
COM‐пропагандист
|
||
| 25.03.2022, 13:14 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||
| 25.03.2022, 14:16 [ТС] | ||
|
Двоичные данные тоже что-то обозначают, это же не рандомные нули и единицы Как их преобразовать, чтобы получить идентификатор алгоритма
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
|
| 25.03.2022, 14:25 [ТС] | |
|
Вот скриншот документации, я устанавливаю параметр HP_ALGID, чтобы получить в буфер идентификатор алгоритма, хорошо, он возвращает двоичный код, как преобразовать его в идентификатор, который этот двоичный код означает (а он должен обозначать алгоритм, потому что в документации указано, что в буфер возвращается алгоритм при указании HP_ALGID)
Если указать HP_HASHVAL или HP_HASHSIZE, то в буфер выводятся значения, которые я смог преобразовать к удобному мне виду (то есть хеш в шестнадцатеричных числах, размер хеша в десятичных), но если я пытаюсь преобразовать данные буфера, которые получаю при HP_ALGID, никак не могу получить "CALG_...", чтобы я ни делал
0
|
|
|
COM‐пропагандист
|
|
| 26.03.2022, 11:12 | |
|
Вам по указателю на BYTE функция записывает данные и ещё заполняет сколько байт она туда записала.
Преобразуйте указатель на BYTE, который вы передавали в функцию, в указатель на DWORD или DWORD64 и используйте это число. Добавлено через 1 минуту Указатель на DWORD разыменовать — и получите ID алгоритма хеширования.
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||||||||||||
| 26.03.2022, 14:22 [ТС] | ||||||||||||
Вот такой код выводит 4 таких байта: 4 80 0 0 buffer0 здесь
0
|
||||||||||||
|
COM‐пропагандист
|
|||||||||||||||||||||||||||||||
| 26.03.2022, 15:00 | |||||||||||||||||||||||||||||||
Сообщение было отмечено TongueLizard как решение
Решение
Во‐первых, вы выделяете недостаточно памяти для буфера. Инструкция BYTE* buffer0 = new BYTE; выделит только один BYTE памяти.
Чтобы понять сколько точно BYTE нужно, следует это узнать:
1
|
|||||||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||
| 26.03.2022, 15:26 [ТС] | ||
|
0
|
||
|
COM‐пропагандист
|
||
| 26.03.2022, 15:51 | ||
|
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
|||||||
| 26.03.2022, 16:01 [ТС] | |||||||
|
Вобщем, код получается такой
0
|
|||||||
|
COM‐пропагандист
|
|
| 26.03.2022, 16:24 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||||||||
| 26.03.2022, 16:55 [ТС] | ||||||||
|
Добавлено через 22 минуты Если можно, взгляните, пожалуйста, где я налажал
Конкретно для строчек 29 и 62, если объявить массив просто BYTE* buffer = new BYTE; и не очищать память, то вылетает исключение, но ошибка эта не вылазит
0
|
||||||||
|
COM‐пропагандист
|
|||
| 26.03.2022, 17:13 | |||
|
Добавлено через 2 минуты
1
|
|||
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
||
| 26.03.2022, 17:19 [ТС] | ||
|
0
|
||
|
COM‐пропагандист
|
||
| 26.03.2022, 17:30 | ||
|
Когда вы отправляете значение больше длины буфера, то функция будет читать или даже записывать за пределы буфера. https://ru.wikipedia.org/wiki/... 1%80%D0%B0
0
|
||
|
0 / 0 / 0
Регистрация: 23.12.2018
Сообщений: 37
|
|||||||
| 26.03.2022, 17:44 [ТС] | |||||||
И еще вопрос, возможно покажется глупым, но значение вида 0x000... Это число просто? или нечто вроде адреса хранения алгоритма
0
|
|||||||
|
COM‐пропагандист
|
||
| 26.03.2022, 18:26 | ||
|
1
|
||
| 26.03.2022, 18:26 | |
|
Помогаю со студенческими работами здесь
19
Защита программ с помощью алгоритма хеширования md2 CryptGetHashParam Как самому сгенерить то, что генерит она? Как получить уникальный идентификатор сеанса Как получить какой-то идентификатор компьютера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
|