我尝试使用CryptStringToBinary和CryptDecodeObjectEx从PEM文件加载私钥,当私钥没有密码保护时,它可以正常工作,但当密钥受密码保护时它不起作用。
if(!CryptStringToBinary(buffer.get(), length, CRYPT_STRING_BASE64HEADER, reinterpret_cast<BYTE*>(outBuffer.get()),
&outLength, 0, 0))
{
cerr << "CryptStringToBinary Error: " << GetLastError();
return -1;
}
DWORD keyBlobLength = 0;
CRYPT_PRIVATE_KEY_INFO* keyBlob = 0;
if(!CryptDecodeObjectEx(X509_ASN_ENCODING, PKCS_PRIVATE_KEY_INFO,
reinterpret_cast<const BYTE*>(outBuffer.get()),
outLength, CRYPT_DECODE_ALLOC_FLAG, 0, &keyBlob, &keyBlobLength))
{
cerr << "CryptDecodeObjectEx Error:\n" << GetLastError();
return -1;
}
如何使用密码解密PEM文件?我需要使用WinCrypt而不是openssl。