问题描述
我有一个PKCS#8密钥,我拼命尝试导入CryptoAPI,但没有成功。我有:
-----BEGIN PRIVATE KEY-----
<privatekey>
-----END PRIVATE KEY-----
包含以下内容:
Private Key algo RSA
Private Format PKCS#8
ASN1 Dump
RSA Private CRT Key [.....]
modulus: .....
public exponent: .....
我尝试这样导入密钥:
if not CryptStringToBinaryA(
PansiChar(aBase64PrivateKey),// pszString: LPCSTR;
length(aBase64PrivateKey),// cchString: DWORD;
CRYPT_STRING_BASE64HEADER,// dwFlags: DWORD;
nil,// pbBinary: pByte;
@cbPrivKey,// pcbBinary: PDWORD;
nil,// pdwSkip: PDWORD;
nil) then raiseLastOsError; // pdwFlags: PDWORD
setlength(pPrivKey,cbPrivKey);
if not CryptStringToBinaryA(
PansiChar(aBase64PrivateKey),// dwFlags: DWORD;
@pPrivKey[0],// pdwSkip: PDWORD;
nil) then raiseLastOsError; // pdwFlags: PDWORD
//init pKeyBlob
if not CryptDecodeObjectEx(
X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,// dwCertEncodingType: DWORD;
PKCS_PRIVATE_KEY_INFO,// lpszStructType: LPCSTR;
@pPrivKey[0],// const pbEncoded: PBYTE;
cbPrivKey,// cbEncoded: DWORD;
0,// pDecodePara: PCRYPT_DECODE_PARA;
nil,// pvStructInfo: Pointer;
@cbKeyBlob) then raiseLastOsError; // pcbStructInfo: PDWORD
setlength(pKeyBlob,cbKeyBlob);
if not CryptDecodeObjectEx(
X509_ASN_ENCODING or PKCS_7_ASN_ENCODING,// pDecodePara: PCRYPT_DECODE_PARA;
@pKeyBlob[0],// pvStructInfo: Pointer;
@cbKeyBlob) then raiseLastOsError; // pcbStructInfo: PDWORD
//acquire a handle to a particular key container
if (not CryptAcquireContextA(@hProv,// phProv: PHCRYPTPROV;
nil,// pszContainer: PAnsiChar;
nil,// pszProvider: PAnsiChar;
PROV_RSA_AES,// dwProvType: DWORD;
CRYPT_VERIFYCONTEXT)) then raiselastOsError; // dwFlags: DWORD
try
// Now import the key.
if not CryptImportKey(hProv,// hProv: HCRYPTPROV;
@pKeyBlob[0],// const pbData: PBYTE;
cbKeyBlob,// dwDataLen: DWORD;
0,// hPubKey: HCRYPTKEY;
0,// dwFlags: DWORD;
@hRSAKey) then raiseLastOsError; // phKey: PHCRYPTKEY
但是CryptImportKey
失败,并出现“提供程序的版本错误” ,我想是因为它正在等待PKCS#1密钥。如何导入 PKCS#8 密钥?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)