cryptoapi-不同版本的Windows之间的键导出/导入键
-
29-09-2019 - |
题
在Win 2003 32位,我成功地导出了 PRIVATEKEYBLOB
与 CryptExportKey
呼叫(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,我相信)。
不隶属于 StackOverflow