Код (Text): HCRYPTPROV hCertProv; //получаем дискриптор криптопровайдера if (!CryptAcquireContext( &hCertProv, NULL, NULL, 75, CRYPT_VERIFYCONTEXT)) { printf("Error CryptAcquireContext...."); getch(); return; } //открываем хранилище MY HCERTSTORE hStoreHandle; if ( !( hStoreHandle = CertOpenStore( CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER, //CERT_SYSTEM_STORE_LOCAL_MACHINE, L"MY"))) { printf("Can't open store MY."); } // получаем контекс сертификата PCCERT_CONTEXT pSignerCert; AnsiString Recepient="Имя_получателя"; wchar_t buf[50]; swprintf(buf,L"%S",Recepient); const void *signer = buf; pSignerCert = CertFindCertificateInStore( hStoreHandle, MY_ENCODING_TYPE, 0, CERT_FIND_SUBJECT_STR, signer, NULL); if(!pSignerCert) { ShowMessage( "Certificate isn't found"); return; } //получаем дескриптор открытого ключа HCRYPTKEY hPubKey; if(pSignerCert) { if (!CryptImportPublicKeyInfo( hCertProv, X509_ASN_ENCODING, &pSignerCert->pCertInfo->SubjectPublicKeyInfo, &hPubKey)) { printf("\nError CryptImportPublicKeyInfo..."); getch(); return; } CertFreeCertificateContext(pSignerCert); } else { printf("\nCertContext not define..."); } //определение размера блоба открытого ключа DWORD dwBlobLen; if(!CryptExportKey( hPubKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) { printf("Error computing BLOB length."); } BYTE *pbKeyBlob; pbKeyBlob = (BYTE*)malloc(dwBlobLen); if(!pbKeyBlob) { printf("Out of memory. \n"); } //-------------------------------------------------------------------- // экспорт открытого ключа в блоб if(!CryptExportKey( hPubKey, 0, PUBLICKEYBLOB, 0, pbKeyBlob, &dwBlobLen)) { printf("Error during CryptExportKey."); } //-------------------------------------------------------------------- // открываем файл пишем в него блоб FILE *Public; Public = fopen("pub_test.bin", "w+b"); if(!Public) { ShowMessage( "Problem opening the file pub_test.bin\n" ); } if(!fwrite(pbKeyBlob, 1, dwBlobLen, Public)) { printf( "The public key can not be written to the 'pub_test.bin'\n" ); } //-------------------------------------------------------------------- //закрытие хэндлов и освобождение памяти fclose (Public); free(pbKeyBlob); if(hPubKey) CryptDestroyKey(hPubKey); if(hCertProv) CryptReleaseContext(hCertProv, 0); ShowMessage("The #CertPublicKey#ran to completion without error. \n"); return; Но единственный касяк не находится сертификат если имя получателя на русском языке.