在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位)是否是导致失败的预期原因,是否有办法实现此功能?
答案 0 :(得分:0)
正如猜测的那样,ATL的CCryptDerivedKey产生的公钥在两个系统上并不相同。在两个版本的ATL库中,CCryptDerivedKey的默认设置必须不同。
由于我可以同时访问源服务器和目标服务器,因此我可以以一致的方式重新导出并导入密钥 - 指定算法,密钥大小和盐的存在。
很高兴知道CCryptDerivedKey :: Initialize方法的确切设置是在早期版本的ATL库中(Visual Studio 2005,我相信)。