При попытке из сервиса импортировать из файла 3DES ключик выдает ошибку NTE_BAD_KEY.
Если собрать как консольное приложение все работает.
Может кто знает в чем фишка.
if(!CryptAcquireContext(&hProv,"_hprvkey1",MS_ENHANCED_PROV,PROV_RSA_FULL,0 /*CRYPT_MACHINE_KEYSET*/) && !CryptAcquireContext(&hProv,"_hprvkey1",MS_ENHANCED_PROV,PROV_RSA_FULL,CRYPT_NEWKEYSET /*| CRYPT_MACHINE_KEYSET*/))
{
ResCode = -1;
}
// Open key from file
;
RSAPubKey1024 PubKey;
dwLen=sizeof(RSAPubKey1024);
CFile dskFile;
if(!dskFile.Open(KeyFileName.c_str(),CFile::modeRead))
{
ResCode = -10034;
goto Ennd;
}
// Read
if(dskFile.Read(&PubKey,dwLen) != dwLen)
{
ResCode = -101;
goto Ennd;
}
}
dskFile.Close();
// Import key
else
if(!CryptImportKey(hProv,(unsigned char *) &PubKey,dwLen,0,0 ,&wrkKey))
{
DWORD Err = GetLastError();
ResCode = -102;
goto Ennd;
}
// Create HASH
if(!CryptCreateHash(hProv,CALG_MD5,0,0,&hHash))
{
ResCode = -103;
goto Ennd;
}
// Read 3DES key from file
if (Data->Read(&EncryptedPartHeader, sizeof(EncryptedPartHeader)) != sizeof(EncryptedPartHeader))
{
ResCode = -104;
goto Ennd;
}
// Import 3DES key
if(!CryptImportKey(hProv,(BYTE *)&EncryptedPartHeader.kb,EncryptedPartHeader.KeyLen/*sizeof(RSA1024KeyExchBLOB)*/,wrkKey,0,&h3DESKey))
{
//NTE_BAD_DATA
DWORD Err = GetLastError();
ResCode = -105;
goto Ennd;
}