Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2012, 11:43   #1
idec
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 10
Восклицание C++ CryptoAPI Экспорт сессионного ключа в строку..

Добрый день. Мне надо достать сгенеренный сессионный ключ. Но возникает проблема на этапе Получения дескриптора ключа.
Код:
#include <iostream>
#include <fstream>
#include <windows.h>
#include <conio.h>
#include <stdio.h>

void printErr()
{
	cout << "--Error--" << std::endl;
	getch();
	return;
}

int main()
{
///////************************************************///////
		HCRYPTPROV hProv = NULL;
		HCRYPTKEY hSessionKey, hPublicKey;
		std::cout << "Action                               " << "Status" << std::endl;
		std::cout << "----------------------------------------------" << std::endl;
		// Получение контекста криптопровайдера
		std::cout << "Cryptographic provider initializing  ";
		if (!CryptAcquireContext(&hProv, NULL, NULL, 
			PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) printErr();
		else std::cout << "--Ok--" << std::endl;
		
		// Генерация сессионного ключа
		std::cout << "Session encryption key generating    ";
		if (!CryptGenKey(hProv, CALG_RC4, CRYPT_EXPORTABLE, 
			&hSessionKey)) printErr();
		else std::cout << "--Ok--" << std::endl;
		
		//Получение дескриптора открытого ключа
		std::cout << "Reseiving descriptor of pulic key    ";
		if (!CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hSessionKey)) printErr();
		else std::cout << "--Ok--" << std::endl;

		DWORD dlen = 16;
		//CryptExportKey(hSessionKey, 0, PLAINTEXTKEYBLOB, 0, NULL, &dlen);
		//BYTE* data = new BYTE[dlen];
		BYTE data[1000];
		CryptExportKey(hSessionKey, NULL, PLAINTEXTKEYBLOB, NULL, data, &dlen);
                // Вывод ключа
		std::cout << "Session key: " << data << std::endl;

		// Данные для шифрования
		char string[]="Test123";
		std::cout << "Source string: " << string << std::endl;
		DWORD count=strlen(string);

		// Шифрование данных
		std::cout << "Encryption completing                ";
		if (!CryptEncrypt(hSessionKey, 0, true, 0, (BYTE*)string, 
			&count, strlen(string))) printErr();
		else std::cout << "--Ok--" << std::endl;

		// Тестовый вывод на экран
		std::cout << "Encrypted string: " << string << std::endl;

		//----------------------
		// Дешифрование данных
		std::cout << "Decryption completing                ";
		if(!CryptDecrypt(hSessionKey, 0, true, 0, (BYTE*)string, &count)) printErr();
		else std::cout << "--Ok--" << std::endl;
				
		// Тестовый вывод на экран
		std::cout << "Decrypted string: " << string << std::endl;
		///////************************************************////////////////
		getch();			
		//////////////////////////////////////////////////////////////
		// Уничтожение дескриптора открытого ключа.
		if(hSessionKey) CryptDestroyKey(hSessionKey);
		// Освобождение дескриптора провайдера.
		if(hProv) CryptReleaseContext(hProv, 0);
	return 0;
}

Не ясно, почему на этом этапе ошибка. Перепробовал разными способами все делать, не меняется результат.
idec вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сертификат CryptoApi Dianochka Помощь студентам 0 13.05.2012 12:39
CryptoApi с++ Экспорт ключа шифрования Dianochka Помощь студентам 0 24.04.2012 09:58
функция CryptoAPI mira_m Помощь студентам 5 14.12.2011 22:51
Проблемное CryptoAPI Namelles One Win Api 1 07.11.2008 08:27
CryptoAPI: вопрос по ф-ям Lisi4ka Компоненты Delphi 1 28.09.2008 14:53