Всем привет. Имею следующий код :
Но в public.txt пишется мусор. Укажите на ошибку. Спасибо.
#include <Windows.h>
HCRYPTPROV hProv;
HCRYPTKEY hKey;
bool InitRSA()
{
if (!CryptAcquireContextW(&hProv, NULL, MS_ENHANCED_PROV_W, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
if (GetLastError() == NTE_BAD_KEYSET)
{
return CryptAcquireContextW(&hProv, NULL, MS_ENHANCED_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET);
}
return false;
}
return true;
}
void Entry()
{
if (InitRSA())
{
if (CryptGenKey(hProv, AT_KEYEXCHANGE, 0x08000000 + CRYPT_EXPORTABLE, &hKey))
{
DWORD dwPublicKeyLen;
if (CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, NULL, &dwPublicKeyLen))
{
BYTE* PublicKey = (BYTE*)LocalAlloc(0, sizeof(BYTE) * dwPublicKeyLen);
if (CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, PublicKey, &dwPublicKeyLen))
{
HANDLE hFile = CreateFileW(L"public.txt", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (hFile != NULL)
{
WriteFile(hFile, &PublicKey, dwPublicKeyLen, 0, 0);
}
}
}
}
}
}
HCRYPTPROV hProv;
HCRYPTKEY hKey;
bool InitRSA()
{
if (!CryptAcquireContextW(&hProv, NULL, MS_ENHANCED_PROV_W, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT))
{
if (GetLastError() == NTE_BAD_KEYSET)
{
return CryptAcquireContextW(&hProv, NULL, MS_ENHANCED_PROV_W, PROV_RSA_FULL, CRYPT_NEWKEYSET);
}
return false;
}
return true;
}
void Entry()
{
if (InitRSA())
{
if (CryptGenKey(hProv, AT_KEYEXCHANGE, 0x08000000 + CRYPT_EXPORTABLE, &hKey))
{
DWORD dwPublicKeyLen;
if (CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, NULL, &dwPublicKeyLen))
{
BYTE* PublicKey = (BYTE*)LocalAlloc(0, sizeof(BYTE) * dwPublicKeyLen);
if (CryptExportKey(hKey, NULL, PUBLICKEYBLOB, 0, PublicKey, &dwPublicKeyLen))
{
HANDLE hFile = CreateFileW(L"public.txt", GENERIC_WRITE, 0, 0, CREATE_ALWAYS, 0, 0);
if (hFile != NULL)
{
WriteFile(hFile, &PublicKey, dwPublicKeyLen, 0, 0);
}
}
}
}
}
}
Но в public.txt пишется мусор. Укажите на ошибку. Спасибо.