1

在Win 2003 32位上,我成功导出PRIVATEKEYBLOB,调用了CryptExportKey(dwFlags = 0)。然后,我尝试使用64位可执行文件在Win Server 2008 64位上导入密钥块,致电CryptImportKey的调用失败,并返回NTE_BAD_DATACryptoAPI - 在不同版本的Windows之间导出/导入密钥

在这两种情况下,加密提供初始化为调用

CryptAcquireContext(& hProv, szContainer,NULL,PROV_RSA_AES, CRYPT_MACHINE_KEYSET)

导出密码/导入比赛。公钥基于密码的md5哈希的CryptDeriveKey,它们在纯文本表示中相同。我不确定公钥在两个系统中是否相等。

系统的不同类型(Win 2003 32位vs Win 2008 64位)是预期的失败原因,有没有办法让这个工作起作用?

回答

0

由于猜测ATL的CCryptDerivedKey生成的公钥在两个系统上并不相同。 CCryptDerivedKey的默认设置在两个版本的ATL库中必须不同。

由于我可以访问源服务器和目标服务器,我可以以一致的方式重新导出和导入密钥 - 指定算法,密钥大小和盐的存在。

很高兴知道CCryptDerivedKey :: Initialize方法在早期版本的ATL库(Visual Studio 2005,我相信)中的确切设置。

相关问题