Microsoft CryptoAPI 提供三層架構:應用程式層、作業系統層、密碼服務提供者(CSP)層。核心功能包含基本加密、憑證編解碼、憑證存儲管理、簡單/底層訊息處理。
CryptAcquireContext:取得 CSP 控制代碼。CryptGenKey / CryptDeriveKey:產生金鑰。CryptCreateHash / CryptHashData:雜湊運算。CryptEncodeObject / CryptDecodeObject:ASN.1/DER 編解碼。CryptSignAndEncodeCertificate:建立自簽名憑證。CryptAcquireContext)。CryptGenKey, AT_SIGNATURE)。CERT_NAME_INFO 等結構)。CryptSignAndEncodeCertificate 簽名並編碼憑證。// 取得 CSP
HCRYPTPROV hProv;
CryptAcquireContext(&hProv, _T("MyContainer"), NULL, PROV_RSA_FULL,
CRYPT_MACHINE_KEYSET | CRYPT_NEWKEYSET);
// 產生金鑰
HCRYPTKEY hKey;
CryptGenKey(hProv, AT_SIGNATURE, 0x08000000 /* RSA 2048 */, &hKey);
// 簽名編碼憑證
CERT_NAME_BLOB subject = { ... }; // 填入主體資訊
CERT_KEY_GEN_REQUEST_INFO reqInfo = { ... };
CRYPT_ALGORITHM_IDENTIFIER sigAlg = { szOID_RSA_SHA1RSA };
DWORD cbEncoded = 0;
CryptSignAndEncodeCertificate(hProv, AT_SIGNATURE, X509_ASN_ENCODING,
X509_CERT_TO_BE_SIGNED, &reqInfo, &sigAlg, NULL, NULL, &cbEncoded);
BYTE* pbEncoded = new BYTE[cbEncoded];
CryptSignAndEncodeCertificate(hProv, AT_SIGNATURE, X509_ASN_ENCODING,
X509_CERT_TO_BE_SIGNED, &reqInfo, &sigAlg, NULL, pbEncoded, &cbEncoded);
// pbEncoded 即為 DER 編碼的自簽名憑證
#include <windows.h> #include <wincrypt.h>Crypt32.lib, Advapi32.lib, CryptUI.lib(視需求)。_WIN32_WINNT 0x0400;VS2008+ 不需。CryptExportKey 加密匯出)。