谁能解释为什么 CryptImportKey 函数在从另一台计算机导入加密的会话类型密钥 blob 时接受 0 的 hPubKey(解密密钥句柄)?
环境是这样的:
PC #1:在本地密钥容器 (w/AT_KEYEXCHANGE) 中生成密钥交换密钥对(公共/私有)CryptGenKey
,然后将公共部分导出为 PUBLICKEYBLOB 并将其发送到 PC #2
PC #2:从 PC #1 获取公钥 blob 并将其导入本地密钥容器。在同一本地密钥容器中创建会话密钥。使用从客户端密钥 blob 导入的公钥(用于加密会话密钥)将本地密钥容器会话密钥导出到 SIMPLEBLOB ( CryptExportKey
)。
PC #1:从 PC #2 获取加密的会话密钥块并调用CryptImportKey
,提供本地密钥容器 hProv、密钥块缓冲区指针和长度、hPubKey 和标志的 0(零)以及指向 HCRYPTKEY 句柄的指针.
完成上述操作后,我得到了一个有效的句柄,并且可以调用CryptEncrypt
并CryptDecrypt
使用我得到的句柄。是的,如果我在 CryptImportKey 上指定从 PC #1 上的第一步生成的密钥交换密钥对的句柄,那也可以。我只是不明白为什么 hPubKey 的 0 有效,就好像 CryptoAPI“知道”私钥是什么来加密数据一样。
谢谢。