1

在 Win 2003 32 位上,我通过调用 (dwFlags=0)成功导出了PRIVATEKEYBLOB一个。CryptExportKey然后我尝试在具有 64 位可执行文件的 Win Server 2008 64 位上导入密钥 blob,调用CryptImportKey失败并显示NTE_BAD_DATA.

在这两种情况下,加密提供者都是通过调用来初始化的

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

导出/导入的密码匹配。公钥基于CryptDeriveKey密码的 md5 哈希值,这些密码在纯文本表示中是相同的。我不确定两个系统中的公钥是否最终相等。

不同类型的系统(Win 2003 32 位与 Win 2008 64 位)是否是预期的失败原因,有没有办法让它工作?

4

1 回答 1

0

正如推测的那样,ATL 的 CCryptDerivedKey 生成的公钥在两个系统上并不相等。CCryptDerivedKey 的默认设置在两个版本的 ATL 库中必须不同。

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

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

于 2010-12-08T21:48:50.653 回答