CSP學習之CryptoAPI初識

Crypto API目的就是提供開發者在windows下使用PKI的編程接口。
Crypto 提供了不少的加解密相關函數,如編碼、解碼、加密解密,哈希,數字證書、證書管理證書存儲等、
 
 
 
有關加密的API的國際標準
(1)GSS-API (Generic Security Services API)
(2)CDSA
(3)RSA PKCS#11
(4)微軟CryptoAPI
 
微軟的CryptoAPI是Win32平臺下爲應用程序開發者提供的數據加解密和安全的編程接口。
包含了:
一、基本的ASN.1編碼 解碼 散列
二、數據加解密
三、數字證書等
 
 
在不安全的網絡上進行安全的數據傳輸涉及3個方面:
一、信息隱藏                 數據加解密
二、身份鑑別                數字簽名和驗籤  數字證書
三、完整性檢驗            哈希值
 
 
 
                                                            CryptoAPI應用
 
 
 
爲保證應用程序的安全性和移植性,應遵循的三條原則
一、應用程序不能訪問密鑰的內容
二、應用程序不能指定加密操做細節
三、應用程序不能處理用戶的信任憑證(由CSP來完成)
 
 
CryptoAPI體系:
    一、基本加密函數
    二、證書編碼與解碼函數
    三、證書存儲函數
    四、簡化信息存儲函數
    五、底層信息處理函數
 
 
 
 
 
 
 
 
CSP學習               : http://blog.csdn.net/liuhuiyi/article/details/7766611
 
 
CryptoAPI體系結構
        CryptoAPI體系架構共由五大部分組成:
                (1) 基本加密函數:用於選擇CSP、創建CSP鏈接、產生密鑰、交換及傳輸密鑰等操做
                (2) 證書編解碼函數:用於數據加密、解密、哈希等操做,建立和校驗數字簽名操做;實現證書、證書撤銷列表、證書請求和證書擴展編碼和解碼操做。
                (3) 證書庫管理函數:用於數字證書及證書管理等操做。這組函數用於管理證書、證書撤銷列表和證書信任列表的使用、存儲、獲取等。
                (4) 簡單的消息函數:用於消息處理,好比消息編解碼,消息加解密,數字簽名及簽名驗籤等操做。它是把多個底層消息函數包裝在一塊兒以完成某個特定任務,方便用戶使用。
                 (5) 底層消息函數:底層消息函數對傳輸的PKCS#7數據進行編碼,對接收到的PKCS#7數據進行解碼,而且對接收到的消息進行解碼和驗證。它能夠實現簡單消息函數能夠實現的全部功能,且提供更大的靈活性,但通常須要更多的函數調用。
 
CrpytoAPI基本功能
    利用CryptoAPI,開發者能夠給基於windows的應用程序添加安全服務,包括:ANS.1編碼/解碼、數據加解密、身份認證、數字證書管理、同時支持PKI、對稱密碼技術等。
            (1) 密鑰管理
                    在CryptoAPI中,支持兩種類型的密鑰:會話密鑰、公私鑰對。會話密鑰也稱爲對稱密鑰,用於對稱密鑰算法。爲了保證密鑰的安全性,在CryptoAPI中,這些密鑰都保存在CSP內部,用戶能夠經過CryptExportKey以加密密鑰形式導出。公私鑰用於非對稱加密算法。非對稱加密算法主要用於加解密會話密鑰和數字簽名。在CryptoAPI中,通常來講,大多數CSP產生的密鑰容器包含兩對密鑰對,一對用於加密會話密鑰,稱爲交換密鑰對,一對用於產生數字簽名,稱爲簽名密鑰對。在CryptoAPI中全部的密鑰都存儲在CSP中,CSP負責密鑰的建立,銷燬,導入導出等操做。
            (2) 數據編解碼
                    CryptoAPI採用的編碼方式爲ASN.1,編碼規則爲DER,表示發送數據時先把數據抽象爲ASN.1對象,而後使用DER編碼規則把ASN.1對象轉化爲可傳輸的0,1串;接收方接收到數據後,利用DER解碼規則把0,1串轉化爲ASN.1對象,而後把ASN.1對象轉化爲具體應用支持的數據對象。
            (3)數據加解密   
                    在CryptoAPI中約定加密較大數據塊時,採用對稱密鑰算法。經過其封裝好的加解密函數來實現數據加解密操做。
            (4)哈希和數字簽名
                    哈希和數字簽名通常用於數據的完整性校驗和身份鑑別。CryptoAPI中,經過其封裝好的哈希與數字簽名函數來實現相關操做。微軟公司提供的CSP產生的數字簽名遵循RSA標準(PKCS#6)
            (5)數字證書管理
                    數字證書主要用於安全通訊中的身份鑑別。CryptoAPI中,對數字證書的使用管理函數分爲證書與證書庫函數、證書驗證函數兩大部分。
 
 
 
在VC++中開發CryptoAPI應用程序,須要預先設置一些編譯環境。
一、須要包含如下頭文件
    #include <windows.h>
    #include <wincrypt.h>
二、包含的靜態連接庫
        連接CryptoAPI函數必須有靜態庫Crypto32.lib的支持,部分CryptoAPI函數可能還須要靜態庫advapi32.lib及CryptUI.lib的支持。
三、若是在VC++6.0上編譯程序,則還需加上如下語句:
        #ifndef _WIN32_WINNT
        #define _WIN32_WINNT    0X0400
        #endif
    在不一樣版本的windows操做系統下,可能須要定義不一樣的常量,具體看wincrypt.h頭文件,根據wincrypt.h上不一樣的預編譯語句在本身的應用程序中進行不一樣定義。
 
注:部分的CryptoAPI函數在VC++6.0上並無定義,如CertGetNameString函數爲CryptoAPI的管理函數,可是在VC++6.0下編譯會報錯,查看相應的wincrypt.h文件時會發現裏邊沒有聲明該函數。但在VC++7.0以上的版本中則定義了這個函數。解決方法是能夠將VC++7.0以上的wincrypt.h和crypt32.lib還有advapi32.lib三個文件覆蓋vc++6.0的相應文件。
 
 
如下介紹幾個編寫CryptoAPI應用程序經常使用的函數:
 
一、 boolean CRYPTFUNC CryptAcquireContext(
                HCRYPTPROV*     phProv,                //csp句柄
                LPCTSTR                pszContainer,    //密鑰容器名稱,指向密鑰容器的字符串指針
                LPCTSTR                pszProvider,       //指向CSP名稱的字符串指針,若是爲NULL,則使用默認的CSP
                DWORD                dwProvType,        //CSP類型
                DWORD                dwFlags                //標誌
);
 
這個函數是爲了得到CSP句柄,函數經過phProv參數返回得到的CSP句柄。在CryptoAPI加密服務相關的全部操做都在CSP實現,CSP真正實行加密相關服務的獨立模塊,當應用程序須要加密相關服務時,好比:加解密操做,密鑰生產用於管理等,必須先獲取某個CSP句柄。這是通常CryptoAPI編程的第一步。
 
 
二、BOOL CRYTPFUNC CryptGenKey(
                HCRYPTPROV         hProv,            //CSP句柄
                ALG_ID                    Algid,            //算法標誌ID,建立會話密鑰時,它指定具體的加解密算法。建立公私鑰對時,參數應該爲AT_KEYEXCHANGE(交換密鑰對)或 AT_SIGNATURE(簽名密鑰對)。
                DWORD                dwFlags,            //說明建立密鑰的長度及其餘屬性
                HCRYPTKEY*         phKey                //新建立密鑰句柄,函數經過這個參數返回建立的密鑰句柄
);
 
在CryptoAPI中,構造密鑰通常有兩種方法,一經過哈希值,二經過隨機數構造。上邊這種就是經過隨機數建立的。下面介紹利用哈希值建立的函數。
 
三、BOOL CRYPTFUNC CryptDeriveKey(
                    HCRYPTPROV         hProv,            //
                    ALG_ID                    Algid,             //要產生密鑰的對稱加密算法
                    HCRYPTHASH        hBaseData,    //哈希句柄,函數根據這個哈希句柄建立密鑰
                    DWORD                 dwFlags,         //指定密鑰的類型
                    HCRYPTKEY*          phKey            //密鑰句柄,函數經過這個參數返回建立的密鑰句柄
);
 
這個函數經過輸入的哈希值hBaseData來建立一個密鑰,經過密鑰句柄phKey參數返回。注意這個函數只能用於建立會話密鑰,不能用於建立公私鑰對。
 
 
四、BOOL CRYPTFUNC CryptCreateHash(
                    HCRYPTPROV        hProv,
                    ALG_ID                    Algid,            //哈希算法標誌
                    HCRYPTKEY            hKey,            //若是哈希算法是密鑰哈希,如HMACH或者MAC算法,就用此密鑰句柄傳遞密鑰,對於非密鑰算法,此參數爲NULL
                    DWORD                  dwFlags,        //保留,必須爲0
                    HCRYPTHASH*        phHash        //哈希句柄,函數經過這個參數返回建立的哈希對象句柄
);
 
這個函數初始化一個哈希句柄,它建立而且返回一個CSP哈希句柄。
 
 
 
五、BOOL WINAPI     CryptHashData(
                    HCRYPTPROV         hHash,
                    BYTE*                      pbData,            //指向要加入到哈希句柄的數據指針
                    DWORD                  dwDataLen,        //數據長度
                    DWORD                  dwFlags                //標誌
);
 
這個函數是計算一段數據的哈希值並加入到指定的哈希句柄中,在使用這個函數前必須經過CryptHashData函數建立一個哈希句柄。
 
 
六、BOOL WINAPI CryptEncodeObject(
            __in        DWORD    dwCertEncodingType,    //使用的編碼類型一般爲X509_ASN_ENCODING|PKCS_7_ASN_ENCODING
            __in        LPCSTR    lpszStructType,                //要編碼的結構體類型
            __in        const void*     pvStructInfo,            //欲編碼的結構體指針,要和lpszStructType類型一致
            __out    BYTE*        pbEncoded,                    //編碼後結構體指針,當設置爲NULL時用於獲取其長度
            __in_out      DWORD*        pcbEncoded        //編碼後的結構體長度
);
 
這個函數用於將pvStructInfo所指向的數據按照lpszStructType結構體類型編碼。
 
 
七、BOOL WINAPI CryptDecodeObject(
            __in        DWORD     dwCertEncodingType,    
            __in        LPCSTR       lpszStructType,
            __in        const BYTE*    pbEncoded,
            __in        DWORD        cbEncoded,
            __in        DWORD        dwFlags,
            __in        void*            pvStructInfo,
            __in_out DWORD*        pcbStructInfo
);
 
這個函數是對上面編碼的數據進行解碼,參數和上面編碼函數的參數差很少,具體能夠查看幫助文檔。
 
 
 
 
 

 

1、基本加密函數html

 

基本加密函數爲開發加密應用程序提供了足夠靈活的空間。全部CSP 的通信都是經過這些函數。c++

一個CSP 是實現全部加密操做的獨立模塊。在每個應用程序中至少須要提供一個CSP來完成所需的加密操做。算法

若是使用多於一個以上的CSP,在加密函數調用中就要指定所需的CSP。微軟基本加密提供者(Microsoft Base Cryptographic Provider),是缺省綁定到CryptoAPI 裏的。若是沒有指定其餘CSP 時,這個CSP 就是卻省的。編程

每個CSP 對CryptoAPI 提供了一套不一樣的實現。一些提供了更增強大的加密算法,而其餘一些CSP 包含了對硬件的支持,好比智能卡。另外,一些CSP 偶爾和使用者直接通信,好比數字簽名就使用了用戶的簽名私鑰。windows

基本加密函數包含了如下幾種:api

 

服務提供者函數:數組

 

應用程序使用服務提供者函數來鏈接和斷開一個CSP。下面就是主要的API:安全

 

CryptAcquireContext網絡

得到指定CSP 的密鑰容器的句柄架構

CryptContextAddRef

對HCRYPTPROV 句柄增長一個應用計數

CryptEnumProviders

枚舉當前計算機中的CSP

CryptEnumProviderTypes

枚舉CSP 的類型

CryptGetDefaultProvider

對於指定CSP 類型的卻省CSP

CryptGetProvParam

獲得一個CSP 的屬性

CryptInstallDefaultContext

安裝先前獲得的HCRYPTPROV 上下文做爲當前卻省的上下文

CryptReleaseContext

釋放由CryptAcquireContext 獲得的句柄

CryptSetProvider 和

CryptSetProviderEx

爲指定CSP 類型指定一個卻省的CSP

CryptSetProvParam

指定一個CSP 的屬性

CryptUninstallDefaultContext

刪除先前由CryptInstallDefaultContext 安裝的卻省上下文

 

 

 

 

 

 

 

 

 

 

密鑰的產生和交換函數:

 

密鑰產生函數建立、配置和銷燬加密密鑰。他們也用於和其餘用戶進行交換密鑰。下面就是主要的一些函數:

 

CryptAcquireCertificatePrivateKey

對於指定證書上下文獲得一個HCRYPTPROV 句柄和dwKeySpec

CryptDeriveKey

從一個密碼中派生一個密鑰

CryptDestoryKey

銷燬密鑰

CryptDuplicateKey

製做一個密鑰和密鑰狀態的精確複製

CryptExportKey

把CSP 的密鑰作成BLOB 傳送到應用程序的內存空間中

CryptGenKey

建立一個隨機密鑰

CryptGenRandom

產生一個隨機數

CryptGetKeyParam

獲得密鑰的參數

CryptGetUserKey

獲得一個密鑰交換或簽名密鑰的句柄

CryptImportKey

把一個密鑰BLOB 傳送到CSP中

CryptSetKeyParam

指定一個密鑰的參數

 

編碼/解碼函數:

 

有一些編碼/解碼函數,他們能夠用來對證書、證書撤銷列表、證書請求和證書擴展進行編碼和解碼。如下就是這幾個函數:

 

CryptDecodeObject

對lpszStructType 結構進行解碼

CryptDecodeObjectEx

對lpszStructType 結構進行解碼,此函數支持內存分配選項

CryptEncodeObject

對lpszStructType 結構進行編碼

CyptEncodeObjectEx

對lpszStructType 結構進行編碼,此函數支持內存分配選項

 

 

數據加密/解密函數:

 

這些函數支持數據的加密/解密操做。CryptEncrypt 和CryptDecrypt 要求在被調用前指定一個密鑰。這個密鑰能夠由CryptGenKey、CryptDeriveKey 或CryptImportKey 產生。建立密鑰時要指定加密算法。CryptSetKeyParam 函數能夠指定額外的加密參數。

 

CryptDecrypt

使用指定加密密鑰來解密一段密文

CryptEncrypt

使用指定加密密鑰來加密一段明文

CryptProtectData

執行對DATA_BLOB 結構的加密

CryptUnprotectData

執行對DATA_BLOB 結構的完整性驗證和解密

 

 

哈希和數字簽名函數:

 

這些函數在應用程序中完成計算哈希、建立和校驗數字簽名。

 

CryptCreateHash

建立一個空哈希對象

CryptDestoryHash

銷燬一個哈希對象

CryptDuplicateHash

複製一個哈希對象

CryptGetHashParam

獲得一個哈希對象參數

CryptHashData

對一塊數據進行哈希,把它加到指定的哈希對象中

CryptHashSessionKey

對一個會話密鑰進行哈希,把它加到指定的哈希對象中

CryptSetHashParam

設置一個哈希對象的參數

CryptSignHash

對一個哈希對象進行簽名

CryptVerifySignature

校驗一個數字簽名

 

 

 

 

2、證書和證書庫函數

 

這組函數管理、使用和取得證書、證書撤銷列表和證書信任列表。這些函數能夠分紅一下幾組:

 

證書庫函數:

 

一個用戶站點能夠收集許多證書。這些證書是爲這個站點的用戶所使用的,證書描述了這個用戶的具體身份。對於每一個人,可能有一個以上的證書。證書庫和其相關的函數提供了對庫得到、枚舉、驗證和使用證書庫裏的信息。

如下就是這些函數:

 

CertAddStoreToCollection

在證書庫中增長一個證書

CertCloseStore

關閉一個證書庫句柄

CertControlStore

若是證書緩衝區和證書自己內容不相符時,容許給應用程序發一個通知

CertDuplicateStore

經過增長引用計數來複制證書庫句柄

CertEnumPhysicalStore

對於指定系統庫枚舉物理庫

CertEnumSystemStore

枚舉全部可用的系統庫

CertEnumSystemStoreLocation

枚舉可用系統庫的全部位置

CertGetStoreProperty

獲得一個庫的屬性

CertOpenStore

使用指定庫類型來打開證書庫

CertOpenSystemStore

打開一個系統證書庫

CertRegisterPhysicalStore

在一個註冊系統庫裏增長一個物理庫

CertRegisterSystemStore

註冊一個系統庫

CertRemoveStoreFromCollection

從一個庫集合裏刪除證書庫

CertSaveStore

保存證書庫

CertSetStoreProperty

設置證書屬性

CertUnregisterPhysicalStore

從系統庫中刪除一個物理庫

CertUnregisterSystemStore

反註冊一個指定系統庫

 

維護函數:

 

CryptoAPI 提供了證書和證書庫函數以下:

 

CertAddSerializeElementToStore

在庫中增長一系列證書或CRL

CertCreateContext

從編碼字節中建立指定上下文

CertEnumSubjectInSortedCTL

在CTL 庫中枚舉信任主題

CertFindSubjectInCTL

在CTL 中尋找指定主題

CertFindSubjectInSortedCTL

在分類CTL 中尋找指定主題

 

證書函數:

 

下列函數是針對於證書的。大多數函數都是處理CRL 和CTL 的。

 

CertAddCertificateContextToStore

在證書庫裏增長一個證書上下文

CertAddCertificateLinkToStore

在證書庫裏增長一個對不一樣庫裏的證書上下文的連接

CertAddEncodedCertificateToStore

把編碼證書轉換成證書上下文而且把它加到證書庫裏

CertCreateCertificateContext

從編碼證書中建立一個證書上下文。但這個上下文並不放到證書庫裏

CertCreateSelfSignCertificate

建立一個自簽名證書

CertDeleteCertificateFromStore

從證書庫裏刪除一個證書

CertDuplicateCertificate

經過增長引用計數來複制證書上下文

CertEnumCertificateInStore

在證書庫裏枚舉證書上下文

CertFindCertificateInStore

在證書庫裏尋找證書上下文

CertFreeCertificateContext

釋放一個證書上下文

CertGetIssuerCertificateFromStore

在證書庫裏獲得指定主題證書的發行者

CertGetSubjectCertificateFromStore

得到主題證書的上下文

CertGetValidUsages

返回全部證書的用法

CertSerializeCertificateStoreElement

串行化編碼證書的證書上下文

CertVerifySubjectCertificateContext

使用發行者來驗證主題證書

CryptUIDlgViewContext

顯示證書、CRL 或CTL

CryptUIDlgSelectCertificateFromStore

從指定庫中顯示對話框,能夠從中選擇證書

 

 

證書撤銷列表函數:

 

CertAddCRLContextToStore

在證書庫裏增長一個CRL 上下文

CertAddCRLLinkToStore

在不一樣的庫裏增長一個CRL 上下文連接

CertAddEncodedCRLToStore

把編碼CRL 轉化成CRL 上下文而後把它加入到證書庫中

CertCreateCRLContext

從編碼CRL 中建立CRL 句柄,但不把它加到庫中

CertDeleteCRLFromStore

從證書庫裏刪除一個CRL

CertDuplicateCRLContext

經過增長引用計數來複制CRL 上下文

CertEnumCRLsInStore

枚舉庫裏的CRL 句柄

CertFindCertificateInCRL

從指定證書裏尋找CRL 列表

CertFindCRLInStore

在庫裏尋找CRL 上下文

CertFreeCRLContext

釋放CRL 上下文

CertGetCRLFromStore

從庫裏獲得CRL 上下文句柄

CertSerializeCRLStoreElement

串行化CRL 上下文的編碼CRL 和它的屬性

 

證書信任列表函數:

 

CertAddCTLContextToStore

把一個CTL 上下文加入到證書庫裏

CertAddCTLLinkToStore

給不一樣庫裏的CRL 上下文添加連接

CertAddEncodedCTLToStore

把編碼CTL 轉化成CTL 上下文而且把它加到證書庫裏

CertCreateCTLContext

從編碼CTL 中建立CTL 上下文

CertDeleteCTLFromStore

從證書庫裏刪除CTL

CertDuplicateCTLContext

經過增長引用計數來複制CTL 上下文

CertEnumCTLsInStore

在證書庫裏枚舉CTL 上下文

CertFindCTLInStore

在證書庫裏查找CTL 上下文

CertFreeCTLContext

釋放CTL 上下文

CertSerializeCTLStoreElement

串行化CTL 上下文的編碼CTL 和屬性

 

擴展屬性函數:

 

CertEnumCertificateContextProperties

枚舉指定證書上下文的屬性

CertEnumCRLContextProperties

枚舉指定CRL 上下文的屬性

CertEnumCTLContextProperties

枚舉指定CTL 上下文的屬性

CertGetCertificateContextProperty

獲得證書屬性

CertGetCRLContextProperty

獲得CRL 屬性

CertGetCTLContextProperty

獲得CTL 屬性

CertSetCertificateContextProperty

設置證書屬性

CertSetCRLContextProperty

設置CRL 屬性

CertSetCTLContextProperty

設置CTL 屬性

 

 

 

3、證書驗證函數

 

證書驗證是經過CTL 和證書列表進行的。

 

使用CTL 的函數:

 

CertVerifyCTLUsage

驗證CTL 用法

CryptMsgEncodeAndSignCTL

編碼和驗證CTL

CryptMsgGetAndVerifySigner

從一個消息中得到和驗證CTL

CryptMsgSignCTL

對包含CTL 的消息進行簽名

 

證書鏈驗證函數:

 

CertCreateCertificateChainEngine

爲應用程序建立一個新的非卻省的鏈引擎

CertCreateCTLEntryFromCertificateContextProperties

建立一個CTL 入口

CertDuplicateCertificateChain

經過增長引用計數來複制證書鏈

CertFindChainInStore

在證書庫裏查找證書鏈

CertFreeCertificateChain

釋放證書鏈

CertFreeCertificateChainEngine

釋放證書鏈引擎

CertGetCertificateChain

從最後一個證書創建一個上下文鏈表

CertSetCertificateContextPropertiesFromCTLEntry

經過CTL 入口屬性來設置證書上下文的屬性

CertIsValidCRLForCertificate

經過檢查CRL 來肯定CRL 是否包括指定被撤銷的證書

CertVerifyCertificateChainPolicy

經過檢查證書鏈來肯定它的完整性

 

4、消息函數

 

CryptoAPI 消息函數包括兩組:低級消息函數和簡化消息函數。

低級消息函數直接和PKCS#7 消息工做。這些函數對傳輸的PKCS#7 數據進行編碼,對接收到的PKCS#7 數據進行解碼,而且對接收到的消息進行解密和驗證。

簡化消息函數是比較高級的函數,是對幾個低級消息函數和證書函數的封裝,用來執行指定任務。這些函數在完成一個任務時,減小了函數調用的數量,所以簡化了CryptoAPI的使用。

 

低級消息函數:

 

CryptMsgCalculateEncodedLength

計算加密消息的長度

CryptMsgClose

關閉加密消息的句柄

CryptMsgControl

執行指定的控制函數

CryptMsgCountersign

標記消息中已存在的簽名

CryptMsgCountersignEncoded

標記已存在的簽名

CryptMsgDuplicate

經過增長引用計數來複制加密消息句柄

CryptMsgGetParam

對加密消息進行編碼或者解碼後獲得的參數

CryptMsgOpenToDecode

打開加密消息進行解碼

CryptMsgOpenToEncode

打開加密消息進行編碼

CryptMsgUpdate

更新加密消息的內容

CryptMsgVerifyCountersignatureEncoded

驗證SignerInfo 結構中標記時間

CryptMsgVerifyCountersignatureEncodedEx

驗證SignerInfo 結構中標記時間簽名者能夠是CERT_PUBLIC_KEY_INFO 結構

 

 

 

 

簡化消息函數:

 

CryptDecodeMessage

對加密消息進行解碼

CryptDecryptAndVerifyMessageSignature

對指定消息進行解密而且驗證簽名者

CryptDecryptMessage

解密指定消息

CryptEncryptMessage

加密指定消息

CryptGetMessageCertificates

返回包含消息的證書和CRL 的證書庫

CryptGetMessageSignatureCount

返回簽名消息的簽名者數量

CryptHashMessage

建立消息的哈希

CryptSignAndEncryptMessage

對消息進行簽名而且加密

CryptSignMessage

對消息進行簽名

CryptVerifyDetachedMessageHash

驗證包含已解邦定哈希的哈希消息

CryptVerifyDetachedMessageSignature

驗證包含已解邦定簽名的簽名消息

CryptVerifyMessageHash

驗證一個哈希消息

CryptVerifyMessageSignature

驗證一個簽名消息

 

5、輔助函數

 

數據管理函數

 

CertCompareCertificate

比較兩個證書是否相同

CertCompareCertificateName

經過比較兩個證書名稱來決定他們是否相同

CertCompareIntegerBlob

比較兩個整數BLOB

CertComparePublicKeyInfo

經過比較兩個證書公鑰來決定他們是否相同

CertFindAttribute

經過OID 來查找屬性

CertFindExtension

經過OID 來查找擴展

CertFindRDNAttr

經過OID 來查找RDN 屬性

CertGetIntendedKeyUsage

從證書中取得相關密鑰用法

CertGetPublicKeyLength

從公鑰BLOB 中取得公鑰/私鑰長度

CertIsRDNAttrsInCertificateName

經過指定RDN 數組屬性比較證書名稱屬性來決定證書是否已包含了全部屬性

CertVerifyCRLRevocation

驗證主題證書是否在CRL 中

CertVerifyCRLTimeValidity

驗證CRL 的有效時間

CertVerifyRevocation

驗證主題證書是否在CRL 中

CertVerifyTimeValidity

驗證CRL 的有效時間

CertVerifyValidityNesting

驗證主題時間的有效性是否在發行者有效時間內

CryptExportPublicKeyInfo

導出公鑰信息

CryptExportPublicKeyInfoEx

導出公鑰信息(用戶能夠指定算法)

CryptFindCertificateKeyProvInfo

枚舉CSP 和它的密鑰容器來查找對應於公鑰的相應私鑰

CryptFindLocalizedName

查找指定名字的局部化名稱

CryptHashCertificate

哈希證書內容

CryptHashPublicKeyInfo

計算公鑰信息的哈希

CryptHashToBeSigned

計算簽名內容的信息哈希值

CryptImportPublicKeyInfo

把公鑰信息導入CSP 而且返回它的句柄

CryptImportPublicKeyInfoEx

把公鑰信息導入CSP 而且返回它的句柄

CryptMemAlloc

分配內存

CryptMemFree

釋放內存

CryptMemRealloc

從新分配內存

CryptQueryObject

獲得BLOB 或文件的內容信息

CryptSignAndEncodeCertificate

對信息進行簽名而且編碼

CryptSignCertificate

對證書進行簽名

CryptVerifyCertificateSignature

使用公鑰信息對主題證書或CRL 的簽名進行驗證

CryptVerifyCertificateSignatureEx

使用公鑰信息對主題證書或CRL 的簽名進行驗證

 

 

 

 

 

 

 

 

數據轉換函數

 

 

CertAlgIdToOID

把CSP 算法標示符轉換成OID

CertGetNameString

獲得證書的主題或頒發者名稱而且把它轉換成字符串

CertNameToStr

把證書名稱BLOB 轉換成字符串

CertOIDToAlgId

把OID 轉換成CSP 算法表示符

CertRDNValueToStr

把名稱值轉換成字符串

       

CertStrToName

把字符串轉換成編碼證書名稱

CryptBinaryToString

把二進制序列轉換成字符串

CryptFormatObject

格式化編碼數據,返回Unicode 字符串

CryptStringToBinary

把格式化的字符串轉換成二進制序列

 

 

加強密鑰用法函數

 

CertAddEnhancedKeyUsageIdentifier

在證書EKU 屬性中增長一個用法標示符

CertGetEnhancedKeyUsage

得到證書的EKU 擴展或屬性信息

CertRemoveEnhancedKeyUsageIdentifier

從證書EKU 擴展屬性中刪除用法標示符OID

CertSetEnhancedKeyUsage

設置證書的EKU 屬性

 

 

 

 

 

 

 

密鑰標示函數

 

CryptCreateKeyIdentifierFromCSP

建立CSP 公鑰的密鑰標示符

CryptEnumKeyIdentifierProperties

枚舉標示符和其屬性

CryptGetKeyIdentifierProperty

從指定密鑰標示符中得到指定屬性

CryptSetKeyIdentifierProperty

設置指定密鑰標示符的屬性

 

 

證書庫回調函數

 

CertDllOpenStoreProv

定義庫提供者打開函數

CertStoreProvCloseCallback

決定當證書庫引用計數爲0 時將發生的動做

CertStoreProvDeleteCertCallback

決定當從證書庫中刪除一個證書以前的動做

CertStoreProvDeleteCRLCallback

決定當從證書庫中刪除一個CRL 以前的動做

CertStoreProvReadCertCallback

保留

CertStoreProvReadCRLCallback

保留

CertStoreProvSetCertPropertyCallback

決定在CertSetCertificateContextProperty 和CertGetCertificateContext 調用以前的動做

CertStoreProvSetCRLPropertyCallback

決定在CertSetCRLContextProperty 和CertGetCRLContextProperty 調用以前的動做

CertStoreProvWriteCertCallback

決定在證書庫中加入一個證書前的動做

CertStoreProvWriteCRLCallback

決定在證書庫中加入一個CRL 前的動做

CertStoreProvReadCTL

讀CSP 的CTL 上下文

CertStoreProvWriteCTL

決定CTL 是否可被加入到證書庫中

CertStoreProvDeleteCTL

決定CTL 是否可被刪除

CertStoreProvSetCTLProperty

決定是否能夠設置CTL 的屬性

CertStoreProvControl

當緩衝庫和存儲庫不一樣時,通知應用程序

CertStoreProvFindCert

在證書庫中查找下一個證書

CertStoreProvFreeFindCert

釋放前一個找到的證書上下文

CertStoreProvGetCertProperty

獲得指定的證書屬性

CertStoreProvFindCRL

查找第一個或下一個匹配的CRL

CertStoreProvFreeFindCRL

釋放前一個找到的CRL 上下文

CertStoreProvGetCRLProperty

獲得指定CRL 屬性

CertStoreProvFindCTL

查找第一個或下一個匹配的CTL

CertStoreProvFreeFindCTL

釋放前一個找到的CTL 上下文

CertStoreProvGetCTLProperty

獲得指定CTL 屬性

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OID 支持函數

 

CryptEnumOIDFuction

枚舉由編碼類型、函數名和OID 指定註冊的OID 函數

CryptEnumOIDInfo

枚舉註冊的OID 信息

CryptEnumOIDInfo

使用指定的密鑰和組查找OID 信息

CryptFreeOIDFuctionAddress

釋放OID 函數地址句柄

CryptGetDefaultOIDDllList

對於指定的函數結合和類型得到卻省註冊的DLL 入口

CryptGetDefaultOIDFuctionAddress

得到已安裝的第一次或下一個卻省函數或者加載包含卻省函數的DLL

CryptGetOIDFuctionAddress

搜索匹配指定編碼類型和OID 函數列表,若是沒有找到,就查找註冊表

CryptGetOIDFuctionValue

得到指定編碼類型、函數名稱和OID 的值

CryptInitOIDFuctionSet

初始化OID 函數集合的句柄

CryptInstallOIDFuctionAddress

安裝可調用的OID 函數地址集合

CryptRegisterDefaultOIDFuction

註冊包含卻省函數的DLL

CryptRegisterOIDFuction

註冊包含指定函數的DLL

CryptRegisterOIDInfo

註冊由CRYPT_OID_INFO 指定的OID 信息

CryptSetOIDFuctionValue

設置編碼類型、函數名稱等的值

CryptUnregisterDefaultOIDFunction

卸載包含卻省函數的DLL

CryptUnregisterOIDFuction

卸載包含函數的DLL

CryptUnregisterOIDInfo

卸載指定OID 的信息

 

遠程對象恢復函數

 

CryptGetObjectUrl

從證書、CTL 或CRL 中取得遠程對象的URL

CryptRetrieveObjectByUrl

由URL 指定位置恢復PKI 對象

 

PFX 函數

PFXExportCertStore

從證書庫中導出證書或證書和私鑰

PFXExportCertStoreEx

從證書庫中導出證書或證書和私鑰

PFXImportCertStore

從PFX BLOB 導入到指定證書庫

PFXIsPFXBlob

把外層BLOB 像pfx 包那樣解碼

PFXVerifyPassword

把外層BLOB 像pfx 包那樣解碼,而且用指定口令解密

相關文章
相關標籤/搜索