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

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

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

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

Ответ
 
Опции темы
Старый 24.04.2012, 09: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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


10:21.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.