代码之家  ›  专栏  ›  技术社区  ›  MrTux

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

  •  8
  • MrTux  · 技术社区  · 10 年前

    我尝试在Windows 7上使用SHA2-512和CryptoAPI,但是,调用 CryptCreateHash 失败,原因是 GetLastError() =2148073480=0x80090008,即“指定的算法无效”。根据 https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549%28v=vs.85%29.aspx SHA2应在Windows XP SP3之后可用。

    下面是我使用的代码:

    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 回复  |  直到 6 年前
        1
  •  15
  •   MrTux    10 年前

    原因是SHA2算法不受 "Microsoft Base Cryptography Provider" ( PROV_RSA_FULL PROV_RSA_SIG ).

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