在 Windows 7 上使用 SHA2-512 (CALG_SHA_512) 会返回"Invalid Algorithm Specified"
Using SHA2-512 (CALG_SHA_512) on Windows 7 returns "Invalid Algorithm Specified"
我正试图在带有CryptoAPI的Windows 7上使用SHA2-512,但调用CryptCreateHash
失败,GetLastError()
=2148073480=0x80090008,即"指定的算法无效"。根据https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549%28v=vs.85%29.aspxSHA2应该从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
}
用CCD_ 3代替CCD_。
我是否必须进行一些进一步的初始化,例如明确激活SHA2?
原因是"Microsoft Base Cryptography Provider"(PROV_RSA_FULL
或PROV_RSA_SIG
)不支持SHA2算法。
需要在CryptAcquireContext
中使用"Microsoft Enhanced RSA and AES Cryptographic Provider"(PROV_RSA_AES
)。
相关文章:
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 如何使 windows 命令提示符在C++可执行文件上显示返回值?
- 几个 Nt 函数在 Windows 7 x32 上返回STATUS_WAIT_0
- 尝试在 Windows 上重定向 stdout 和 stderr——_fileno(stdout) 返回 -2
- 从我的2d数组中的一列返回的字符串值被压缩为一个字符串(在Mac os上打开Windows txt文件)
- Qt5 哈希函数在 Windows 7 和 Windows10 上不会返回相同的哈希
- Windows 函数"GetCursorInfo"返回成功,但光标的句柄为 NULL
- C++ 即使数据可用,Windows recv() 也不会返回
- 如何检查 CNG Windows API 是否返回符合 FIPS 的算法实现
- C++ Windows 返回与退出进程
- repopenKeyex在Windows 8.1上返回2
- Windows句柄始终返回Invalid_handle_value
- 检查Windows激活状态返回错误的值
- 没有返回类型的静态函数可以通过Windows上的编译,但不能传递Linux上的编译
- 使用Outlook 2016:MAPISendMail在Windows应用程序中失败,并返回"MAPI_E_FAILURE"作为错误代码
- Windows HANDLE RAII 管理,如果返回布尔值而不是句柄怎么办?
- 为什么 CoCreateInstance 在某些 Windows 上返回REGDB_E_CLASSNOTREG?
- FCGX_GetParam REQUEST_METHOD可以在Windows中使用,但在Linux中返回NULL
- 创建 CTime @ 2am 不会返回正确的值(Windows CE,C++)
- 为什么返回Windows BOOL数据类型而不返回int