我正在尝试从 PKCS#12 文件中导入 RSA 私钥。我正在使用 OpenSSL 解析 P12,然后尝试使用 CryptImportKey 将密钥导入 CSP(“标准”增强型 RSA 提供程序)。
Ï 创建 blob 的方式与我使用 CryptExportKey 从 CSP 导出密钥时获得的方式完全相同。
最后,我不想使用任何会话加密,因为我只是解析加密文件并将其存储到 CSP 中。如果我使用
publickeystruc.aiKeyAlg := CALG_RSA_KEYX;
和
if not CryptImportKey(tmpprovider,addr(privkey),dwBlobLen,0,flags,hPubKey) then
errorCode := GetLastError;
(所以关键参数为 0)然后函数失败,我得到 ERROR_INVALID_PARAMETER 错误。但是密钥被导入并且可以正常工作(我试图用它签名,如果它被标记为可导出,我就可以导出它)。
变量声明如下:
hpubkey:PHCRYPTKEY;
privkey:privkeyblob;
在哪里
HCRYPTKEY = ULONG;
PHCRYPTKEY = ^HCRYPTKEY;
其余的是整数和基数...
问题解决了,这是一个非常愚蠢的错误。当我在函数开始时将它归零时,我忘记取消引用最后一个参数,所以而不是
hPubKey^:=0;
我有
hPubKey := 0;
感谢 TLama 为我指明了正确的方向。