使用 Crypto32 Windows,函数CryptoImportKey
在 Windows 8.1 上失败,返回 ERROR_INVALID_PARAMETER。它适用于所有先前版本的 Windows。
有人对此有一些提示吗?
代码是:
if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, 0))
{
dwResult = GetLastError();
if (dwResult == NTE_BAD_KEYSET)
{
if (!CryptAcquireContext(&hProv, NULL, MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
{
dwResult = GetLastError();
strAux.Format("Error [%x]: CryptAcquireContext() failed.",dwResult);
AfxMessageBox( strAux, MB_OK);
return;
}
} else {
dwResult = GetLastError();
strAux.Format("Error [0x%x]: CryptAcquireContext() SECOND failed.",dwResult);
AfxMessageBox( strAux, MB_OK);
return;
}
}
if (pbBlob != NULL)
{
//Porto 02-07-2014
*(DWORD *)(pbBlob + 0x14) = 0; // Set the packed key length to zero
if (!CryptImportKey(hProv, pbBlob, cbBlob, 0, 0, &hSessionKey))
{
dwResult = GetLastError();
strAux.Format("Error [%x]: CryptImportKey() failed.Size: %d",dwResult,cbBlob);
AfxMessageBox( strAux, MB_OK);
return;
}
} else {
if (!CryptImportKey(hProv, PrivateKeyWithExponentOfOne, sizeof(PrivateKeyWithExponentOfOne), 0, 0, &hKey))
{
strAux.Format("Error [%x]: CryptImportKey() PRIVATE failed.",dwResult);
AfxMessageBox( strAux, MB_OK);
return;
}