C++ 在Windows 7上使用SHA2-512(CALG_SHA_512)返回;指定的算法无效";

C++ 在Windows 7上使用SHA2-512(CALG_SHA_512)返回;指定的算法无效";,c++,c,cryptography,sha,cryptoapi,C++,C,Cryptography,Sha,Cryptoapi,我试图在Windows 7上使用SHA2-512和CryptoAPI,但是调用CryptoCreateHash失败,原因是GetLastError()=2148073480=0x80090008,即“指定的算法无效”。根据SHA2的要求,应该可以从WindowsXPSP3开始使用 以下是我正在使用的代码: HCRYPTPROV hCryptProv; CryptAcquireContext(&hCryptProv, nullptr, nullptr, PROV_RSA_FULL, CRY

我试图在Windows 7上使用SHA2-512和CryptoAPI,但是调用
CryptoCreateHash
失败,原因是
GetLastError()
=2148073480=0x80090008,即“指定的算法无效”。根据SHA2的要求,应该可以从WindowsXPSP3开始使用

以下是我正在使用的代码:

HCRYPTPROV hCryptProv;
CryptAcquireContext(&hCryptProv, nullptr, nullptr, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT);

HCRYPTHASH hHash;
if (!CryptCreateHash(hCryptProv, CALG_SHA_512, 0, 0, &hHash)) {
    DWORD err = GetLastError(); // -> 2148073480=0x80090008
}
使用
CALG_SHA1
代替
CALG_SHA512
有效


我是否必须进行一些进一步的初始化,例如明确激活SHA2?

原因是(
PROV\u RSA\u FULL
PROV\u RSA\u SIG
)不支持SHA2算法

您需要在
cryptaccesscontext
中使用(
PROV\u RSA\u AES