應用程序使用Crypto API進行加密通訊的通常步驟以下: ui
1,include wincrypt.h 加密
2,調用CryptAcquireContext()得到某個CSP模塊中的密鑰容器(key container)的一個句柄; spa
3,發送方使用CryptImportKey()將接受方的證書導入CSP中,從而得到接收方的公鑰; 對象
4,發送方式用CryptGenKey()隨機產生一個會話密鑰,且用對方的公鑰對會話密鑰進行加密, 資源
用CryptExportKey()將加密後的會話密鑰導出而且發給對方; class
5,接收方收到會話密鑰後,用本身的私鑰調用CryptImportKey(),將會話密鑰解出來; 容器
6,發送方用會話密鑰調用CryptEncrypt()加密數據,而且發送給對方; 程序
7,接收方收到加密後的數據,用會話密鑰調用CryptDecrypt(),對數據進行解密; 通信
8,通訊完畢,調用CryptDestroyKey()釋聽任何密鑰句柄,再用CryptReleaseContext()釋放CSP句柄。 數據
使用Crypto API進行數字簽名及驗證的通常步驟以下:
1,調用CryptAcquireContext()得到某個CSP模塊中的密鑰容器(key container)的一個句柄;
2,簽名者調用CryptGerUserKey()獲得用於簽名的密鑰,並用CryptExportKey()降其中的公鑰輸出,
以便收到數字簽名的人對本身的簽名進行驗證;
3,簽名者用CryptCreateHash()和CryptHashData()計算須要簽名的數據散列值;
4,簽名者用私鑰調用CryptSignHash()給數據的散列值加上本身的簽名;
5,負責驗證簽名的人在收到簽名者發來的公鑰、數據及簽名後,先用CryptImportKey()將簽名者的公鑰導入密鑰容器中;
6,驗證者再簽名者那樣用CryptCreateHash()和CryptHashData()計算數據的散列值;
7,驗證者用CryptVerifySignature()檢查簽名是否有效;
8,調用CryptDestroyHash()釋放散列值對象,並調用CryptReleaseContext()釋放最初的CSP句柄資源。