Session CryptoAPI中的CryptoImportKey接受0的hPubKey以导入加密的会话密钥

Session CryptoAPI中的CryptoImportKey接受0的hPubKey以导入加密的会话密钥,session,cryptography,cryptoapi,encryption,Session,Cryptography,Cryptoapi,Encryption,有人能解释为什么CryptImportKey函数在从另一台计算机导入加密会话类型密钥blob时接受解密密钥句柄为0的hPubKey吗 环境是这样的: PC 1:在本地密钥容器CryptGenKey w/AT_KEYEXCHANGE中生成公钥/私钥交换密钥对,然后将公钥部分导出为PUBLICKEYBLOB并发送到PC 2 PC 2:从PC 1获取公钥blob并将其导入本地密钥容器。在同一本地密钥容器中创建会话密钥。使用从客户端的密钥blob导入的公钥将本地密钥容器会话密钥导出到SIMPLEBLOB

有人能解释为什么CryptImportKey函数在从另一台计算机导入加密会话类型密钥blob时接受解密密钥句柄为0的hPubKey吗

环境是这样的:

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上从上面的第一步生成的密钥交换密钥对的句柄,也可以使用。我只是不明白为什么hPubKey的0可以工作,就好像CryptoAPI知道加密数据的私钥是什么


谢谢。

我能想到的唯一一件事是,你在一个有上下文的会话中使用它,因此知道私钥,或者你实际上没有加密数据。请注意,实际上可以使用模数作为唯一密钥查找私钥,但我无法理解他们是否会在不告诉用户的情况下使用这种方法

PS对不起,我还不能直接对你的问题发表评论,所以我发布了这篇文章,因为时间太长了