Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
артист
94 / 20 / 20
Регистрация: 17.09.2014
Сообщений: 1,185
Завершенные тесты: 2
#1

Wincript, падает программа при получении SHA256

10.01.2016, 07:37. Просмотров 370. Ответов 2
Метки нет (Все метки)

Вызвано исключение по адресу 0x74AB25D9 (cryptsp.dll) в AES Uncript.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0x0000002C.

Если для этого исключения имеется обработчик, выполнение программы может быть продолжено безопасно.
Делаю так:

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
BYTE * pbHash;      // Хэш
WCHAR * wHex;       // hex хэша пароля
DWORD dwHashLen;    // Длина хэш суммы
 
HCRYPTPROV hProv = NULL;
HCRYPTHASH hHash = NULL;
 
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_SCHANNEL, NULL);
//CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, NULL);
 
switch(SendMessageW(hCombobox[1], CB_GETCURSEL, NULL, NULL)) // Тип хеша
{
    case 0: // sha-128
    {
        CryptCreateHash(hProv, CALG_SHA1, NULL, NULL, &hHash);
        dwHashLen = 20;
        break;
    }
    case 1: // sha-256
    {
        CryptCreateHash(hProv, CALG_SHA_256, NULL, NULL, &hHash);
        dwHashLen = 32;
        break;
    }
    case 2: // MD5
    {
        CryptCreateHash(hProv, CALG_MD5, NULL, NULL, &hHash);
        dwHashLen = 16;
        break;
    }
}
CryptHashData(hHash, bData, DataLen, NULL);
pbHash = new BYTE[dwHashLen]; CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &dwHashLen, NULL);
CryptDestroyHash(hHash); CryptReleaseContext(hProv, NULL);
 
wHex = new WCHAR[dwHashLen * 2]; Byte2HexW(pbHash, dwHashLen, wHex);    // Получить в 16м текстовом виде хэш пароля
SetWindowTextW(hEdit[3], wHex);
И ещё хотел узнать, в CryptAcquireContext 4й параметр что это?
Что лучше ставить, PROV_RSA_SCHANNEL или PROV_RSA_FULL?

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.01.2016, 07:37
Ответы с готовыми решениями:

Программа выполняет инкремент при получении определенного сетевого пакета
Здравствуйте, помогите написать такую программу. Или подскажите куда...

Падает программа при использовании DLL
Раньше писал DLL для одного приложения, теперь мне понадобилось его...

Программа падает при чтении из файлов
В C++ слова читаются из двух файлов.выбивает ошибку.Что можно сделать?

При объявлении структуры глобальной программа падает
Всем привет! Сразу говорю, это пример кода. Не вижу смысла все тут...

Программа падает при вызове vector::begin()
#include <iostream> #include <vector> int main () { std::vector<int>...

2
артист
94 / 20 / 20
Регистрация: 17.09.2014
Сообщений: 1,185
Завершенные тесты: 2
10.01.2016, 10:32  [ТС] #2
И вообще нужно ли тут CryptAcquireContext - получение контекста криптопровайдера...
Ну я смотрел, кто ставит его, кто нет, может оно для SHA и MD5 и не нужно?

И ещё хотел спросить про эти 2 функции:
C++
1
2
CryptDestroyHash(hHash);            // Уничтожить объект функции хеширования
CryptReleaseContext(hProv, NULL);   // Освободить дескриптор CSP и ключевой контейнер
Они нужны? Нет, ну я не совсем идиот, понимаю что нужно очищать временные эти...
Может 2я функция не нужна, если не нужно получать контекст дескриптора(CryptAcquireContext)?

А на счёт самой ошибки, может у меня этот файл в самой винде, не содержит алгоритма SHA256?:

C:\Windows\SysWOW64\cryptsp.dll
версия: 6.3.9600.17415 (winblue_r4.141028-1500)
Когда нажимаешь прервать выполнение программы, вылезает вона чё:

Wincript, падает программа при получении SHA256


Или это VS имеет ввиду, что нет файла с отладочной информацией, и можно забить на это(ошибка не в этом)?
0
артист
94 / 20 / 20
Регистрация: 17.09.2014
Сообщений: 1,185
Завершенные тесты: 2
10.01.2016, 14:39  [ТС] #3
Вот полный код(консольное приложение):
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
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <wincrypt.h>
 
int main()
{
    setlocale(LC_ALL, "Russian");
    std::wcout << L"Введите строку (максимум 128) : ";
 
    CHAR buf[128]; std::cin >> buf;
    DWORD count = strlen(buf);
    BYTE bString[256];
    std::copy(buf, buf + count, reinterpret_cast<char *>(bString));
 
    HCRYPTPROV hProv = NULL;                    // Дескриптор криптопровайдера
    HCRYPTHASH hHash = NULL;                    // Дескриптор хэш-объекта
    DWORD dwDataLen = 32;                       // Длина хэша
    BYTE * hash_value = new BYTE[dwDataLen];    // Массив приёмник
 
    CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_SCHANNEL, NULL);   // Получение контекста криптопровайдера
    CryptCreateHash(hProv, CALG_SHA_256, NULL, NULL, &hHash);           // Установка режима хеширования SHA256
    CryptHashData(hHash, bString, count, NULL);                         // Ввод данных для хэширования
    CryptGetHashParam(hHash, HP_HASHVAL, hash_value, &dwDataLen, NULL); // Получение хэша
    CryptDestroyHash(hHash);                                            // Уничтожить объект функции хеширования
    CryptReleaseContext(hProv, NULL);                                   // Освободить дескриптор CSP и ключевой контейнер
 
    std::wcout << std::endl << L"\nhex : ";
 
    for (int i = 0; i < 32; i++) printf("%02x", hash_value[i]);         // Вывести hex в окно
 
    std::wcout << std::endl << std::endl;
    main();
    return 0;
}
Добавлено через 3 часа 40 минут
Нашёл вот тут:
Генерация HMAC CALG_SHA_256 под WindowsXP (CryptoAPI)

Говорят, что с вин xp sp3 должно работать, а у меня 8.1 со всеми обновлениями, что за бред...
Может просто длку скачать и в папку с программой закинуть?

Добавлено через 2 минуты
А, вот так заработало:
C++
1
CryptAcquireContext(&hProv, NULL, MS_ENH_RSA_AES_PROV, PROV_RSA_AES, CRYPT_VERIFYCONTEXT);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2016, 14:39

Программа падает при использовании std::thread
Дополнительный вопрос:почему эта программа падает: #include &lt;thread&gt; #include...

Почему программа падает при сортировке массивов больших размерностей
Добрый день! Подскажите почему прога крашится при размере массива 10000, при...

Почему при изменении литерала const char* программа падает?
точнее литерала. ладно, если бы выходил за пределы


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru