應用程式 → CryptoAPI (標準介面) → CSP (密碼服務提供者,實作演算法) → 可選硬體 (智慧卡、HSM)。類似 GDI 與顯示驅動關係。
CSP 類型與支援演算法:
| CSP 類型 | 金鑰交換 | 簽章 | 對稱加密 | 雜湊 |
|---|---|---|---|---|
| PROV_RSA_FULL | RSA | RSA | RC2, RC4 | MD5, SHA |
| PROV_RSA_SCHANNEL | RSA | RSA | RC4, DES, 3DES | MD5, SHA |
| PROV_DSS | 無 | DSS | 無 | MD5, SHA |
CryptAcquireContext 取得 CSP Handle,若容器不存在可建立 (CRYPT_NEWKEYSET) 或刪除 (CRYPT_DELETEKEYSET)。
HCRYPTPROV hProv;
if (!CryptAcquireContext(&hProv, "MyContainer", NULL, PROV_RSA_FULL, 0)) {
if (!CryptAcquireContext(&hProv, "MyContainer", NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET))
Error("建立容器失敗");
}
流程:開啟檔案 → 取得 CSP → 以密碼建立 MD5 雜湊 → CryptDeriveKey 產生 RC4 Session Key → 逐塊 CryptEncrypt 寫入目的檔。解密流程對稱,使用 CryptDecrypt。
關鍵點:
Final=TRUE 讓 CSP 處理填補。_WIN32_WINNT=0x0400 (NT4) 或 0x0500 (Win2K)advapi32.lib<wincrypt.h>