應(yīng)用程序使用Crypto API進(jìn)行加密通信的一般步驟如下:
1,include wincrypt.h
2,調(diào)用CryptAcquireContext()獲得某個CSP模塊中的密鑰容器(key container)的一個句柄;
3,發(fā)送方使用CryptImportKey()將接受方的證書導(dǎo)入CSP中,從而獲得接收方的公鑰;
4,發(fā)送方式用CryptGenKey()隨機(jī)產(chǎn)生一個會話密鑰,且用對方的公鑰對會話密鑰進(jìn)行加密,用CryptExportKey()將加密后的會話密鑰導(dǎo)出并且發(fā)給對方;
5,接收方收到會話密鑰后,用自己的私鑰調(diào)用CryptImportKey(),將會話密鑰解出來;
6,發(fā)送方用會話密鑰調(diào)用CryptEncrypt()加密數(shù)據(jù),并且發(fā)送給對方;
7,接收方收到加密后的數(shù)據(jù),用會話密鑰調(diào)用CryptDecrypt(),對數(shù)據(jù)進(jìn)行解密;
8,通信完畢,調(diào)用CryptDestroyKey()釋放任何密鑰句柄,再用CryptReleaseContext()釋放CSP句柄。
使用Crypto API進(jìn)行數(shù)字簽名及驗(yàn)證的一般步驟如下:
1,調(diào)用CryptAcquireContext()獲得某個CSP模塊中的密鑰容器(key container)的一個句柄;
2,簽名者調(diào)用CryptGerUserKey()得到用于簽名的密鑰,并用CryptExportKey()降其中的公鑰輸出,以便收到數(shù)字簽名的人對自己的簽名進(jìn)行驗(yàn)證;
3,簽名者用CryptCreateHash()和CryptHashData()計(jì)算需要簽名的數(shù)據(jù)散列值;
4,簽名者用私鑰調(diào)用CryptSignHash()給數(shù)據(jù)的散列值加上自己的簽名;
5,負(fù)責(zé)驗(yàn)證簽名的人在收到簽名者發(fā)來的公鑰、數(shù)據(jù)及簽名后,先用CryptImportKey()將簽名者的公鑰導(dǎo)入密鑰容器中;
6,驗(yàn)證者再簽名者那樣用CryptCreateHash()和CryptHashData()計(jì)算數(shù)據(jù)的散列值;
7,驗(yàn)證者用CryptVerifySignature()檢查簽名是否有效;
8,調(diào)用CryptDestroyHash()釋放散列值對象,并調(diào)用CryptReleaseContext()釋放最初的CSP句柄資源。
聯(lián)系客服