PKCS#12 ファイルから秘密 RSA キーをインポートしようとしています。OpenSSL を使用して P12 を解析し、CryptImportKey を使用してキーを CSP (「標準」拡張 RSA プロバイダー) にインポートしようとしています。
Ï CryptExportKey を使用して CSP からキーをエクスポートした場合とまったく同じ方法で BLOB を作成します。
最後に、暗号化されたファイルを解析して 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に感謝します。