С Новым годом! Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37

Язык выводимой информации

22.02.2018, 16:50. Показов 1520. Ответов 14

Студворк — интернет-сервис помощи студентам
Здравствуйте, искал нужну тему, так и не нашел. Если есть извините. такой вопрос: пытаююсь вывести список поддерживаемых алгоритмов, а выводится такое:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#pragma comment(lib,"advapi32.lib")
#include"stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <Wincrypt.h>
#include <iostream>
using namespace std;
HCRYPTPROV hProv = NULL;
 
int main()
{
    DWORD mybuf;
    mybuf = 1000;
    BYTE pbData[1024];
    CryptAcquireContext(
        &hProv,
        NULL,
        NULL,
        PROV_RSA_FULL,
        CRYPT_VERIFYCONTEXT);
    CryptGetProvParam(
        hProv,
        PP_ENUMALGS_EX,
        pbData,
        &mybuf,
        CRYPT_FIRST);
        cout << pbData << endl;
        while (GetLastError() != ERROR_NO_MORE_ITEMS)
        {
            CryptGetProvParam(
                hProv,
                PP_ENUMALGS_EX,
                pbData,
                &mybuf,
                CRYPT_NEXT
            );
            cout << pbData << endl;
        }
 
        system("pause");
 
    return 0;
}
Понимаю, что в pdData лежит не то. Но где же увидеть то что нужно?
Миниатюры
Язык выводимой информации  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2018, 16:50
Ответы с готовыми решениями:

Как сделать шаблон выводимой информации из БД
Всем привет! Помогите, мне нужно сделать шаблон для вывода информации из бд. Чтобы к примеру выводилось все из какой либо таблицы и...

Шифрование информации. Тарабарский язык (heeeeeelp)
Есть вот такая задача: Я понял так: {шифрация} 1. Разбиваем слова на слоги 2. Делаем выпадающий список с тремя способами...

Красота выводимой формы
Вывожу форму: в ней несколько раскрывающихся списков. Не могу добиться что бы эти спмски имели одинаковую длину. Привет! Спасибо!

14
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
22.02.2018, 22:34
Цитата Сообщение от dilobraz Посмотреть сообщение
вывести список поддерживаемых алгоритмов
Если воспользоваться отладчиком, видим, что pbData указывает не на строку, а на более сложную структуру.
Миниатюры
Язык выводимой информации  
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
22.02.2018, 22:41
Цитата Сообщение от dilobraz Посмотреть сообщение
Но где же увидеть то что нужно?
Вот что написано в справке.

pbData
A pointer to a buffer to receive the data. The form of this data varies depending on the value of dwParam.
Формат данных зависит от значения dwParam

dwParam
PP_ENUMALGS_EX
A PROV_ENUMALGS_EX structure that contains information about one algorithm supported by the CSP being queried.
Используется структура PROV_ENUMALGS_EX.
0
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37
23.02.2018, 14:29  [ТС]
на МДНС посмотрел , что в структуре PROV_ENUMLGS имя алгоритма содерится в szName. но когда вывожу szName опять выводит билиберду
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
23.02.2018, 20:31
Цитата Сообщение от dilobraz Посмотреть сообщение
но когда вывожу szName опять выводит билиберду
А что отладчик показывает? Если установить breakpoint на команде cout << pbData.
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
23.02.2018, 21:01
dilobraz, примерно так...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#pragma comment(lib,"advapi32.lib")
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <Wincrypt.h>
 
int main()
{
    HCRYPTPROV  hProv;         // Handle to CSP
    DWORD       dwAlgCount;
    BYTE        *ptr = NULL;
    DWORD       i;
    ALG_ID      aiAlgid;
    DWORD       dwBits;
    DWORD       dwNameLen;
    CHAR        szName[100];         // Often allocated dynamically
    BYTE        pbData[1000];        // Often allocated dynamically
    DWORD       cbData;
    DWORD       dwFlags;
    CHAR        *pszAlgType = NULL;
 
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
 
// Enumerate the supported algorithms.
    for(i=0 ; ; i++) 
    {
        // Set the CRYPT_FIRST flag the first time through the loop.
        if(i == 0) 
            dwFlags = CRYPT_FIRST;
        else
            dwFlags = 0;
 
        // Retrieve information about an algorithm.
        cbData = 1000;
        if(!CryptGetProvParam(hProv, PP_ENUMALGS, pbData, &cbData, dwFlags)) 
        {
            if(GetLastError() == ERROR_NO_MORE_ITEMS) 
                // Exit the loop.
                break;
            else 
            {
                printf("Error %x reading algorithm!\n", GetLastError());
                return;
            }
        }
 
        // Extract algorithm information from the 'pbData' buffer.
        ptr = pbData;
        aiAlgid = *(ALG_ID *)ptr;
        ptr += sizeof(ALG_ID);
        dwBits = *(DWORD *)ptr;
        ptr += sizeof(DWORD);
        dwNameLen = *(DWORD *)ptr;
        ptr += sizeof(DWORD);
        strncpy(szName, (char*)ptr, dwNameLen);
 
        // Determine the algorithm type.
        switch(GET_ALG_CLASS(aiAlgid)) 
        {
            case ALG_CLASS_DATA_ENCRYPT: 
                pszAlgType = "Encrypt  ";
                break;
            case ALG_CLASS_HASH:
                pszAlgType = "Hash     ";
                break;
            case ALG_CLASS_KEY_EXCHANGE:
                pszAlgType = "Exchange ";
                break;
            case ALG_CLASS_SIGNATURE:
                pszAlgType = "Signature";
                break;
            default:
                pszAlgType = "Unknown  ";
        }
 
        // Print information about the algorithm.
        printf("Algid:%8.8xh, Bits:%-4d, Type:%s, NameLen:%-2d, Name:%s\n",
            aiAlgid, dwBits, pszAlgType, dwNameLen, szName);
    }
    system("pause");
}
0
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37
24.02.2018, 16:37  [ТС]
ДА, сделал так. но теперь, новая проблема. вывести все об алгоримах он вывел, но необходимо вывести только доспутные АЛГОРИТМЫ ХЕШИРОВАНИЯ(без шифрования итд). вывести их под 1. 2. 3. , и чтобы можно было выбирать какой использовать. Надеюсь понятно объяснил)
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2018, 16:46
Кто мешает отфильтровать только ALG_CLASS_HASH?
Заполните именами тот же ComboBox и выбирайте себе на здоровье
0
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37
24.02.2018, 17:01  [ТС]
а можно поподробней ,я немного профан)я просто уже 5 час борозжу просторы инета. да и сам пытаюсь, так ничего путного не вышло
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2018, 17:19
Лучший ответ Сообщение было отмечено dilobraz как решение

Решение

Зачем беретесь за такую тему? Здесь профанам делать нечего... Уж простите.
Просторы Интернета не помогут. Надо иметь свою голову.
Ну да ладно. Вам иметь геморрой...
У нас консоль, поэтому просто выведем все найденные хеши.
(Combobox (выпадающийся список) - это орган управления из оконного интерфейса)
Немного окультурил, описав принимаемые данные с помощью структуры.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#pragma comment(lib,"advapi32.lib")
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <Wincrypt.h>
 
struct CRYPT_NAME
{
    ALG_ID      aiAlgid;
    DWORD       dwBits;
    DWORD       dwNameLen;
    char        szName[20];
};
 
int main()
{
    HCRYPTPROV  hProv;         // Handle to CSP
    DWORD       i, k;
    BYTE        pbData[1000];        // Often allocated dynamically
    DWORD       cbData;
    DWORD       dwFlags;
    CHAR        *pszAlgType = NULL;
    CRYPT_NAME  *pcn;
 
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);
 
// Enumerate the supported algorithms.
    for(i=0, k=0; ; i++) 
    {
        // Set the CRYPT_FIRST flag the first time through the loop.
        if(i == 0) 
            dwFlags = CRYPT_FIRST;
        else
            dwFlags = 0;
 
        // Retrieve information about an algorithm.
        cbData = 1000;
        if(!CryptGetProvParam(hProv, PP_ENUMALGS, pbData, &cbData, dwFlags)) 
        {
            if(GetLastError() == ERROR_NO_MORE_ITEMS) 
                // Exit the loop.
                break;
            else 
            {
                printf("Error %x reading algorithm!\n", GetLastError());
                return -1;
            }
        }
 
        // Extract algorithm information from the 'pbData' buffer.
        pcn = (CRYPT_NAME*)pbData;
 
        if (GET_ALG_CLASS(pcn->aiAlgid) == ALG_CLASS_HASH)
            printf("%d. %s (%d bit)\n", ++k, pcn->szName, pcn->dwBits);
    }
    system("pause");
    return 0;
}
0
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37
24.02.2018, 17:33  [ТС]
спасибо) я иду на стажировку, чтобы научиться программировать,чтобы задания давали итд. и дали задание. Оно наумение пользоваться форумами и докой. Вот и мучаюсь

Добавлено через 8 минут
Можно еще вопрос?) у нас же выводятся алгоритмы хеширования стандартного винодовского криптопровайдера? а в мсдн написано, что у него тип PROV_RSA_FULL, а него в свою очередь только два алгоритма хеширования MD5 и SHA. Почему в Ваашей программе выводятся и другие?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2018, 17:45
dilobraz, впрочем, Ваше желание научиться даже очень похвально
Не начав что-то делать - не научишься. Длинный путь начинается с первых шагов...
Желаю удачи!

Добавлено через 2 минуты
Цитата Сообщение от dilobraz Посмотреть сообщение
Почему в Вашей программе выводятся и другие?
Это не совсем мой пример, я его взял из MSDN Сейчас подумаем...

Добавлено через 5 минут
Цитата Сообщение от dilobraz Посмотреть сообщение
а него в свою очередь только два алгоритма хеширования MD5 и SHA
Кстати, откуда информация?
0
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37
24.02.2018, 17:47  [ТС]
https://ru.wikipedia.org/wiki/... 0%B5%D1%80
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
24.02.2018, 17:57
Вполне допускаю, что есть разновидности семейств алгоритмов. Эти двое являются наиболее яркими представителями

Добавлено через 4 минуты
В API есть сигнатуры для разных хешей. Что мы и видим. Заложены, но не факт, что все используются.
Но это так, размышления. Я серьезно CryptoAPI не использовал. Так что добавить нечего.
0
1 / 1 / 0
Регистрация: 25.04.2016
Сообщений: 37
24.02.2018, 18:10  [ТС]
Вы все равно очень сильно помогли, спасибо большое
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.02.2018, 18:10
Помогаю со студенческими работами здесь

Убрать данные из выводимой строки
У меня выводит данные д.м.г. из базы, как очистить год и привести к формату д.м &lt;p class=&quot;price&quot;&gt;'.$row.'&lt;span...

Пагинация для текста выводимой новости из БД
Как сделать пагинацию текста выводимой новости из БД? Допустим есть 1050 слов, как сделать так чтобы 1050 слов делились на 11 страниц? (по...

Обновление инфоррмации на странице выводимой из БД php
Доброго времени суток! Дорогие мастера кода помогите пожалуйста, с помощью этого кода я вывожу информацию о текущей композиции играющей в...

Является ли формула выводимой в исчислении предикатов?
2. Является ли формула выводимой в исчислении предикатов? Если да, то построить вывод, если нет, то проверить выводимость в одну из сторон....

Как связать полосу прокрутки с выводимой информацией?
Информация при нажатии на кнопку Command3_Click рассчитывается, а затем выводится в виде текста непосредственно на форму (без применения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru