Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 24.04.2012, 08:58   #1
Dianochka
Пользователь
 
Регистрация: 29.11.2007
Сообщений: 32
Стрелка CryptoApi с++ Экспорт ключа шифрования

Хочу экспортировать ключ RC4 в файл зашифровав его другим ключом AES_192. Если ключ другой ключ тоже RC4 то все нормально, но если AES_192 то нет. Не могу понять в чем проблема, может кто подскажет?

Код:
// Получение контекста криптопровайдера
	if (!CryptAcquireContext(
		&hProv, 
		NULL, 
		MS_ENH_RSA_AES_PROV, 
		PROV_RSA_AES, 
		0
		))
	{
	  printf("CryptAcquireContext");
	  getchar();
	  return 0;
	}

	std::cout << "Cryptographic provider initialized" << std::endl;

	// Генерация сессионного ключа
	if (!CryptGenKey(
		hProv, 
		ENCRYPT_ALGORITHM, 
		CRYPT_EXPORTABLE, 
		&hSessionKey
		))
	{
	  printf("ERROR:CryptGenKey");
	  getchar();
	  return 0;
	}

int ExportKey()
{
	std::cout<< "Enter password:  ";
	std::cin>>w;
	getchar();
	LPCSTR sKey = w;
	int lHashPassword = strlen(sKey);

	if(!CryptCreateHash(hProv, CALG_MD5, 0, 0, &hHash))
	{
		printf("ERROR: CryptCreateHash"); 
		getchar();
		return 0;
	}

	if(!CryptHashData(hHash, (BYTE*)sKey, lHashPassword, 0))
	{
		printf("ERROR: CryptHashData"); 
		getchar();
		return 0;
	}

	int si = sizeof(hHash);

	if (!CryptDeriveKey(hProv, CALG_AES_192, hHash, AT_KEYEXCHANGE, &hPublicKey))
	{
		printf("ERROR: CryptDeriveKey"); 
		getchar();
		return 0;
	}
	std::cout <<"hPublicKey  "<< hPublicKey <<std::endl;

	count1 = 0;
	// Получение размера массива, используемого для экспорта ключа
	if (!CryptExportKey(
		hSessionKey, 
		hPublicKey, 
		SYMMETRICWRAPKEYBLOB, 
		0, 
		NULL, 
		&count1
		)) 
	{
		getchar();
	    return 0;
	}
	// Инициализация массива, используемого для экспорта ключа
	data = static_cast<BYTE*>(malloc(count1)); 
	ZeroMemory(data, count1);

	// Экспорт ключа шифрования
	if (!CryptExportKey(
		hSessionKey, 
		hPublicKey, 
		SYMMETRICWRAPKEYBLOB, 
		0, 
		data, 
		&count1
		)) 
	{
	  getchar();
	  return 0;
	}
	std::cout << "Key's export completed:  " << data << std::endl;
Dianochka вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CryptoAPI (JWSCL) - не могу расшифровать bro Общие вопросы Delphi 6 06.01.2012 09:17
функция CryptoAPI mira_m Помощь студентам 5 14.12.2011 21:51
CryptGenRandom,CryptoAPI tiger Помощь студентам 0 24.05.2011 23:10
Проблемное CryptoAPI Namelles One Win Api 1 07.11.2008 08:27
CryptoAPI: вопрос по ф-ям Lisi4ka Компоненты Delphi 1 28.09.2008 13:53


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840