CryptoAPI中的CryptImportKey接受0的hPubKey来导入加密的会话密钥

任何人都可以解释为什么CryptImportKey函数在从另一台计算机导入加密的会话类型密钥blob时接受hPubKey为0(解密密钥句柄)? 环境是这样的: PC#1:在本地密钥容器中生成密钥交换密钥对(公共/私有)(
CryptGenKey
w/ AT_KEYEXCHANGE),然后将公共部分导出为PUBLICKEYBLOB并将其发送到PC#2 PC#2:从PC#1获取公钥 - blob并将其导入本地密钥容器。在同一本地密钥容器中创建会话密钥。使用从客户端密钥blob导入的公钥(将其用于加密会话密钥)将本地密钥容器会话密钥导出到SIMPLEBLOB(
CryptExportKey
)。 PC#1:从PC#2获取加密的会话密钥blob并调用
CryptImportKey
,提供本地密钥容器hProv,密钥blob缓冲区指针和长度,hPubKey和标志的0(零)以及指向HCRYPTKEY的指针处理。 完成上述操作后,我得到一个有效的句柄,可以使用我收到的句柄调用
CryptEncrypt
CryptDecrypt
。是的,如果我在CryptImportKey上指定从PC#1上面的第一步生成的密钥交换密钥对的句柄,那也可以。我只是不明白为什么0为hPubKey工作,就好像CryptoAPI“知道”私钥加密数据是什么。 谢谢。     
已邀请:
我唯一能想到的是你在一个会话中使用它(它有上下文,因此知道私钥),或者你实际上并没有加密数据。请注意,实际上可以使用模数作为唯一键来查找私钥,但我无法理解他们会在不告诉用户的情况下使用这种方法。 对不起,我不能直接(你)对你的问题发表评论,所以我发布了这个因为时间长了。     

要回复问题请先登录注册