BOOL res = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, 0);
if (!res) {
res = CryptAcquireContext (&hCryptProv, NULL, MS_ENHANCED_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET);
}
Передача ключей по сети или через файл в CryptoAPI
На стороне сервера создает пару ключей:
// Получение хэндл криптопровайдера
if (!CryptAcquireContext(&hProv, NULL,MS_DEF_PROV,
PROV_RSA_FULL,0))
{ShowMessage(IntToStr(g));
return; }
// генерация сессионного ключа
if (!CryptGenKey(hProv,CALG_RC4,CRYPT_EXPORTABLE|CRYPT_ENCRYPT, &hSessionKey))
{
ShowMessage("Error_CryptGenKey"); return;
}
// получение ключа для экспорта ключа шифрования
if (!CryptGetUserKey(hProv, AT_KEYEXCHANGE, &hPublicKey)){
ShowMessage("error_CryptGetUserKey");
return; }
countbk = 0;
if (!CryptExportKey(hSessionKey, hPublicKey,SIMPLEBLOB, 0, NULL, &countbk)){
ShowMessage("error_CryptExportKey1");
return; }
/*BYTE* */data = static_cast<BYTE*>(malloc(countbk));
ZeroMemory(data, count);
// экспорт ключа шифрования
if (!CryptExportKey(hSessionKey, hPublicKey,SIMPLEBLOB, 0, data, &countbk)){
ShowMessage("error_CryptExportKey");
return;}
на стороне клиента что то связанное с:
if(!CryptImportKey(hProv, data, countbk, hPublicKey, 0, &hNewKey)){
ShowMessage(GetLastError());
ShowMessage("clientError_Key's import");
return;}
в одной программе всё работает - это понятно. Но по сети не получается: я передавал
и data(BYTE *pbData) и countbk(DWORD dwDataLen) и hPublicKey(HCRYPTKEY hImpKey) .На разных машинах создаются разные провайдеры hProv(HCRYPTPROV hProv).
Или я не туда пошел.Подскажите!!!!ПЖАЛУЙСТА!! а то «у меня уже фляга брызжет».
Или ссылку где популярно обЪеснино или хотя бы намёк.
Код: