MS CryptoAPI在带有CryptAcquireContext()的Windows XP上不起作用

时间:2012-03-20 20:52:57

标签: c++ visual-studio-2010 sha1 cryptoapi mscapi

我使用Microsoft CryptoAPI编写了一些代码来计算SHA-1并使编译的exe工作在Windows 7,Win Server 2008,Win Server 2003上。但是,当我在Windows XP SP3下运行它时,它不起作用。

我将失败归结为CryptAcquireContext()电话。

我注意到a previous post谈到了“ ...(原型)”的XP错误命名,必须通过使用WinXP特定宏MS_ENH_RSA_AES_PROV_XP来解决。

我做了XP特定的代码修改,但它仍然不起作用。 ({1}}在Win XP上返回0 false,所有其他平台bResult返回1为真。)

我检查了MS_ENH_RSA_AES_PROV_XP,其中包含我在regedit.exe中看到的实际键+字符串值,所以一切看起来都已设置为工作但没有成功。

我是否忽视了一些可以在Windows XP上运行的东西?

我贴了最短的例子来说明这个问题。我使用的是VS2010 C ++。

bResult

Windows 7的成功: enter image description here

Windows XP失败: enter image description here

1 个答案:

答案 0 :(得分:5)

在您的CryptAcquireContext代码中,您似乎缺少参数来获取没有特定容器集的上下文。您需要在CryptAcquireContext中传递CRYPT_VERIFYCONTEXT选项。

Windows 7可能会解决此问题。

http://msdn.microsoft.com/en-us/library/windows/desktop/aa379886(v=vs.85).aspx

为了进一步诊断,GetLastError()的结果将是必需的。