Статус: Участник
Группы: Участники
Зарегистрирован: 22.05.2012(UTC) Сообщений: 22 Откуда: СПб
|
Здравствуйте! возник вопрос в подписи если я использую функцию CryptSignHash, то выходной файл весит 64 б и при его открытии винда пишет ошибку "файл не может использоваться как pkcs 7" при использовании функции CryptSignMessage выходной файл весит больше и открывается нормально. вот фрагмент кода Код:
// .... получаю мой сертификат
//....
HCRYPTPROV hProv;
DWORD dwKeySpec;
BOOL fCallerFreeProv;
if(!CryptAcquireCertificatePrivateKey(
pSignerCert,
CRYPT_ACQUIRE_COMPARE_KEY_FLAG,
NULL,
&hProv,
&dwKeySpec,
&fCallerFreeProv
))
{
return -3;
}
HCRYPTKEY hUserKey;
if(! CryptGetUserKey(hProv,AT_KEYEXCHANGE,&hUserKey))
{
return -4;
}
HCRYPTHASH hHash;
if(!CryptCreateHash(
hProv,
CertOIDToAlgId("1.2.643.2.2.9"),//alg.aiAlgid,
hUserKey,
0,
&hHash))
{
return -5;
}
HANDLE hFile = NULL;
BYTE rgbFile[BUFSIZE];
DWORD cbRead = 0;
DWORD dwStatus = 0;
BOOL bResult = FALSE;
hFile = CreateFile(file_name,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_SEQUENTIAL_SCAN,
NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return -6;
}
while (bResult = ReadFile(hFile, rgbFile, 1024,
&cbRead, NULL))
{
if (0 == cbRead)
{
break;
}
if (!CryptHashData(hHash, rgbFile, cbRead, 0))
{
return -7;
}
}
if (!bResult)
{
return -8;
}
BYTE *pbSignature;
DWORD dwSigLen;
if(!CryptSignHash(
hHash,
dwKeySpec,//AT_KEYEXCHANGE,
NULL,
0,
NULL,
&dwSigLen))
{
return -9;
}
if((pbSignature = new BYTE[dwSigLen]) == 0)
{
return -10;
}
if(!CryptSignHash(
hHash,
dwKeySpec,
NULL,
0,
pbSignature,
&dwSigLen))
{
return -11;
}
FILE *sf;
if(_waccess(sign_file,0)==0)
{
sf = _wfopen(sign_file,L"rb+");
if(sf!=NULL)
fseek(sf,0,SEEK_END);
} else
{
sf = _wfopen(sign_file,L"wb");
}
if(sf==NULL)
{
return -12;
}
if(fwrite(pbSignature,dwSigLen,1,sf)!=1)
{
fclose(sf);
return -13;
}
fclose(sf);
скажите пожалуйста, что не так?
|