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

时间:2014-09-13 11:27:24

标签: c++ c cryptography sha cryptoapi

我正在尝试在Windows 7上使用带有CryptoAPI的SHA2-512,但是,调用CryptCreateHash失败,GetLastError() = 2148073480 = 0x80090008,即“指定了无效的算法”。根据{{​​3}},从Windows XP SP3开始,SHA2应该可用。

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

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?

1 个答案:

答案 0 :(得分:13)

原因是,"Microsoft Base Cryptography Provider"PROV_RSA_FULLPROV_RSA_SIG)不支持SHA2算法。

需要使用PROV_RSA_AES中的"Microsoft Enhanced RSA and AES Cryptographic Provider"CryptAcquireContext)。