我使用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的成功:
Windows XP失败:
答案 0 :(得分:5)
在您的CryptAcquireContext代码中,您似乎缺少参数来获取没有特定容器集的上下文。您需要在CryptAcquireContext中传递CRYPT_VERIFYCONTEXT选项。
Windows 7可能会解决此问题。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa379886(v=vs.85).aspx
为了进一步诊断,GetLastError()的结果将是必需的。