Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <wincrypt.h>
- #include <iostream>
- using namespace std;
- // обработчик ошибок
- // для нормальной отладки кода
- void ErrorHandling(){
- DWORD dw = GetLastError();
- switch(dw){
- case (DWORD)NTE_EXISTS:
- cout << "NTE_EXISTS\n";
- break;
- case (DWORD)NTE_NO_KEY:
- cout << "NTE_NO_KEY\n";
- break;
- case (DWORD)NTE_BAD_KEY:
- cout << "NTE_BAD_KEY\n";
- break;
- case (DWORD)NTE_BAD_FLAGS:
- cout << "NTE_BAD_FLAGS\n";
- break;
- case (DWORD)ERROR_INVALID_HANDLE:
- cout << "ERROR_INVALID_HANDLE\n";
- break;
- case (DWORD)ERROR_INVALID_PARAMETER:
- cout << "ERROR_INVALID_PARAMETER\n";
- break;
- }
- }
- int main(){
- HCRYPTPROV hCryptProv; // дескриптор криптопровайдера
- LPCWSTR keyContainerName = L"Container";
- // дескриптор ключей
- HCRYPTKEY hCryptKey = NULL;
- HCRYPTKEY toSignKey = NULL, toExportKey = NULL;
- // создаём ключевой контейнер
- if (!CryptAcquireContext(&hCryptProv,
- keyContainerName,
- MS_DEF_PROV,PROV_RSA_FULL,
- CRYPT_NEWKEYSET))
- {
- ErrorHandling();
- return -1;
- }
- // генерируем ключи для цифровой подписи
- if (!CryptGenKey(hCryptProv,AT_SIGNATURE,CRYPT_EXPORTABLE,&hCryptKey))
- {
- ErrorHandling();
- goto CleanUp;
- }
- if (!CryptGetUserKey(hCryptProv,AT_SIGNATURE,&toSignKey)){
- ErrorHandling();
- goto CleanUp;
- }
- // генерируем ключи для обмена
- if (!CryptGenKey(hCryptProv,AT_KEYEXCHANGE,CRYPT_EXPORTABLE,&hCryptKey))
- {
- ErrorHandling();
- goto CleanUp;
- }
- if (!CryptGetUserKey(hCryptProv,AT_KEYEXCHANGE,&toExportKey)){
- ErrorHandling();
- goto CleanUp;
- }
- CleanUp:
- if (hCryptProv)
- {
- // освобождаем память, удалив контейнер и
- CryptAcquireContext(&hCryptProv,keyContainerName,
- MS_DEF_PROV,PROV_RSA_FULL,
- CRYPT_DELETEKEYSET);
- CryptReleaseContext(hCryptProv,0);
- cout << "Executed\n";
- }
- if (hCryptKey) // освобождаем память
- CryptDestroyKey(hCryptKey);
- if (toSignKey)
- CryptDestroyKey(toSignKey);
- if (toExportKey)
- CryptDestroyKey(toExportKey);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement