在Win 2003 32位,我成功地导出了 PRIVATEKEYBLOBCryptExportKey 呼叫(dwflags = 0)。然后,我尝试在Win Server上导入键Blob 2008 64位,并使用64位可执行 CryptImportKey 失败 NTE_BAD_DATA.

在这两种情况下

cryptacquirecontext(&hprov,szcontainer,null,prov_rsa_aes,crypt_machine_keyset)

导出/导入匹配的密码。公钥是基于 CryptDeriveKey 在其纯文本代表中相同的MD5密码。我不确定公共钥匙最终是否在两个系统中相等。

是否有不同类型的系统(Win 2003 32位vs Win 2008 64位)是预期失败的原因,并且有没有办法使它起作用?

有帮助吗?

解决方案

正如猜想的那样,ATL的CCRyptderivedKey生产的公共钥匙在两个系统上并不平等。在ATL库的两个版本中,CCRyptDerivedKey的默认设置必须不同。

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

很高兴知道CCRyptderivedKey的确切设置::初始化方法是在ATL库的较早版本中(Visual Studio 2005,我相信)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top