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

时间:2011-03-11 06:05:40

标签: session cryptography cryptoapi encryption

当从另一台计算机导入加密的会话类型密钥blob时,有人可以解释为什么CryptImportKey函数接受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缓冲区指针和长度,0(零)用于hPubKey和标志,以及指向HCRYPTKEY句柄的指针。

完成上述操作后,我得到一个有效的句柄,可以使用我收到的句柄调用CryptEncryptCryptDecrypt。是的,如果我在CryptImportKey上指定从PC#1上面的第一步生成的密钥交换密钥对的句柄,那也可以。我只是不明白为什么0为hPubKey工作,就好像CryptoAPI“知道”私钥加密数据是什么。

感谢。

1 个答案:

答案 0 :(得分:0)

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

对不起,我不能直接(你)对你的问题发表评论,所以我发布了这个,因为时间很长。