CryptoAPI - 在不同版本的Windows之间导出/导入密钥

时间:2010-12-01 00:25:57

标签: windows-server-2003 atl windows-server-2008-r2 cryptoapi cryptography

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

在这两种情况下,加密提供程序都通过调用

进行初始化
  

CryptAcquireContext(安培; hProv,   szContainer,NULL,PROV_RSA_AES,   CRYPT_MACHINE_KEYSET)

导出/导入的密码匹配。公钥基于密码的md5哈希的CryptDeriveKey,其明文表示相同。我不确定两个系统中的公钥是否相等。

不同类型的系统(Win 2003 32位与Win 2008 64位)是否是导致失败的预期原因,是否有办法实现此功能?

1 个答案:

答案 0 :(得分:0)

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

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

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