|
|
|
Помогите с CryptoAPI
|
|||
|---|---|---|---|
|
#18+
Подскажите в чем может быть причина и как её решить. Есть клиент и сервер. Клиент хранит свой закрытый ключ. Сервер с помощью открытого ключа клиента шифрует симметричный ключ, которым зашифровано сообщение. Клиент получает зашифрованный симметричный ключ и расшифровывает его своим закрытым. Все эти действия проходят. Но теперь из расшифрованного симметричного ключа я не могу получить HCRYPTKEY, т.е. CryptImportKey не проходит и выдает сообщение типа "неверный провайдер" (самая последняя функция в примере) . В чем я ошибся??????? void CCryptoClass::DeCryptMsg(/*out-in*/char* message,/*out*/DWORD& newlen, /*out*/char* hashKey,char* RSACloseKey,DWORD lenCloseKey) { // расшифровать сообщение HCRYPTPROV hProv; HCRYPTKEY hSessionKey = 0; BOOL bRes; BYTE *pCryptBuf=0; HCRYPTKEY hKey=0; DWORD buflen; DWORD datalen; bRes=CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0); if(!bRes)ShowError(GetLastError()); if(!bRes) { if(GetLastError()==NTE_BAD_KEYSET) if(!CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL, CRYPT_NEWKEYSET)) ShowError(GetLastError()); } bRes=CryptImportKey(hProv,(BYTE*)RSACloseKey,lenCloseKey,NULL,0,&hKey); if(!bRes)ShowError(GetLastError()); DWORD dwhash=strlen(hashKey); bRes=CryptDecrypt(hKey,0,TRUE,0,(BYTE*)hashKey,&dwhash); if(!bRes)ShowError(GetLastError()); BYTE *pbKeyMaterial = NULL; pbKeyMaterial = new BYTE[dwhash]; for(unsigned int c=0; c < dwhash; c++) pbKeyMaterial[c] = hashKey[c]; pbKeyMaterial[dwhash]='\0'; int slen=strlen((char*)pbKeyMaterial); bRes=CryptImportKey(hProv,pbKeyMaterial,slen,0,CRYPT_OAEP,&hSessionKey); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.04.2006, 20:06 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=361&tid=2031524]: |
0ms |
get settings: |
8ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
57ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 284ms |
| total: | 425ms |

| 0 / 0 |
