CpSetKeyParam函数原型为:
BOOL CPSetKeyParam(
__in HCRYPTPROV hProv,
__in HCRYPTKEY hKey,
__in DWORD dwParam,
__in BYTE* pbData,
__in DWORD dwFlags
);
在MSDN中说到当参数 dwParam为 KP_CERTFICATE时,导入证书。
KP_CERTIFICATE |
pbData is the address of a buffer that contains the DER-encoded X.509 certificate. The public key in the certificate must match the corresponding signature or exchange key. |
问题是参数 pbData数据的长度和格式是什么呢?在MSDN中没有相关方档说明。
问题答案是:证书二进制采用TLV(TAG-LENGTH-VALUE)格式。证书二进制数据总是以0x30,0x82,SizeHighByte,SizeLowByte,….这些开头。证书大小不包括开始4个字节,因此应该加上4字节去计算证书的大小。
证书为DER编码