Crypto API目的就是提供开发者在windows下使用PKI的编程接口。
Crypto 提供了很多的加解密相关函数,如编码、解码、加密解密,哈希,数字证书、证书管理证书存储等、
 
 
 
有关加密的API的国际标准
(1)GSS-API (Generic Security Services API)
(2)CDSA
(3)RSA PKCS#11
(4)微软CryptoAPI
 
微软的CryptoAPI是Win32平台下为应用程序开发者提供的数据加解密和安全的编程接口。
包含了:
1、基本的ASN.1编码 解码 散列
2、数据加解密
3、数字证书等
 
 
在不安全的网络上进行安全的数据传输涉及3个方面:
1、信息隐藏                 数据加解密
2、身份鉴别                数字签名和验签  数字证书
3、完整性检验            哈希值
 
 
 
                                                            CryptoAPI应用
 
 
 
为保证应用程序的安全性和移植性,应遵循的三条原则
1、应用程序不能访问密钥的内容
2、应用程序不能指定加密操作细节
3、应用程序不能处理用户的信任凭证(由CSP来完成)
 
 
CryptoAPI体系:
    1、基本加密函数
    2、证书编码与解码函数
    3、证书存储函数
    4、简化信息存储函数
    5、底层信息处理函数
 
 
 
 
 
 
 
 
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应用程序,需要预先设置一些编译环境。
1、需要包含以下头文件
    #include <windows.h>
    #include <wincrypt.h>
2、包含的静态链接库
        链接CryptoAPI函数必须有静态库Crypto32.lib的支持,部分CryptoAPI函数可能还需要静态库advapi32.lib及CryptUI.lib的支持。
3、如果在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应用程序常用的函数:
 
1、 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编程的第一步。
 
 
2、BOOL CRYTPFUNC CryptGenKey(
                HCRYPTPROV         hProv,            //CSP句柄
                ALG_ID                    Algid,            //算法标志ID,创建会话密钥时,它指定具体的加解密算法。创建公私钥对时,参数应该为AT_KEYEXCHANGE(交换密钥对)或 AT_SIGNATURE(签名密钥对)。
                DWORD                dwFlags,            //说明创建密钥的长度及其他属性
                HCRYPTKEY*         phKey                //新创建密钥句柄,函数通过这个参数返回创建的密钥句柄
);
 
在CryptoAPI中,构造密钥一般有两种方法,一通过哈希值,二通过随机数构造。上边这种就是通过随机数创建的。下面介绍利用哈希值创建的函数。
 
3、BOOL CRYPTFUNC CryptDeriveKey(
                    HCRYPTPROV         hProv,            //
                    ALG_ID                    Algid,             //要产生密钥的对称加密算法
                    HCRYPTHASH        hBaseData,    //哈希句柄,函数根据这个哈希句柄创建密钥
                    DWORD                 dwFlags,         //指定密钥的类型
                    HCRYPTKEY*          phKey            //密钥句柄,函数通过这个参数返回创建的密钥句柄
);
 
这个函数通过输入的哈希值hBaseData来创建一个密钥,通过密钥句柄phKey参数返回。注意这个函数只能用于创建会话密钥,不能用于创建公私钥对。
 
 
4、BOOL CRYPTFUNC CryptCreateHash(
                    HCRYPTPROV        hProv,
                    ALG_ID                    Algid,            //哈希算法标志
                    HCRYPTKEY            hKey,            //如果哈希算法是密钥哈希,如HMACH或者MAC算法,就用此密钥句柄传递密钥,对于非密钥算法,此参数为NULL
                    DWORD                  dwFlags,        //保留,必须为0
                    HCRYPTHASH*        phHash        //哈希句柄,函数通过这个参数返回创建的哈希对象句柄
);
 
这个函数初始化一个哈希句柄,它创建并且返回一个CSP哈希句柄。
 
 
 
5、BOOL WINAPI     CryptHashData(
                    HCRYPTPROV         hHash,
                    BYTE*                      pbData,            //指向要加入到哈希句柄的数据指针
                    DWORD                  dwDataLen,        //数据长度
                    DWORD                  dwFlags                //标志
);
 
这个函数是计算一段数据的哈希值并加入到指定的哈希句柄中,在使用这个函数前必须通过CryptHashData函数创建一个哈希句柄。
 
 
6、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结构体类型编码。
 
 
7、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、基本加密函数

基本加密函数为开发加密应用程序提供了足够灵活的空间。所有CSP 的通讯都是通过这些函数。

一个CSP 是实现所有加密操作的独立模块。在每一个应用程序中至少需要提供一个CSP来完成所需的加密操作。

如果使用多于一个以上的CSP,在加密函数调用中就要指定所需的CSP。微软基本加密提供者(Microsoft Base Cryptographic Provider),是缺省绑定到CryptoAPI 里的。如果没有指定其他CSP 时,这个CSP 就是却省的。

每一个CSP 对CryptoAPI 提供了一套不同的实现。一些提供了更加强大的加密算法,而其他一些CSP 包含了对硬件的支持,比如智能卡。另外,一些CSP 偶尔和使用者直接通讯,比如数字签名就使用了用户的签名私钥。

基本加密函数包含了以下几种:

服务提供者函数:

 

应用程序使用服务提供者函数来连接和断开一个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 包那样解码,并且用指定口令解密

 

CSP学习之CryptoAPI初识的更多相关文章

  1. 二、Android学习第二天——初识Activity(转)

    (转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...

  2. Java学习-027-JSON 之一 -- 初识

    通常,我们在生活中使用的应用产品(无论是 Web应用还是 App 应用),又或者我们平常的信息交流,均无可避免的存在着信息交互,在信息交互的过程中就有着信息载体的存在.那么,在我们熟知的网络应用产品中 ...

  3. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  4. Storm学习笔记 - Storm初识

    Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...

  5. [转]git学习------>git-rev-parse命令初识

    git学习------>git-rev-parse命令初识 2017年06月13日 10:04:13 阅读数:2172 一.准备工作 第一步:在d盘git test目录下,新建工作区根目录dem ...

  6. Spring 学习记录8 初识XmlWebApplicationContext(2)

    主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...

  7. CSP:使用CryptoAPI解码X509证书内容

    微软的CryptoAPI提供了一套解码X509证书的函数,一个X509证书解码之后,得到一个PCCERT_CONTEXT类型的结构体指针. 通过该结构体,我们就能够获取想要的证书项和属性等. X509 ...

  8. LevelDB学习笔记 (1):初识LevelDB

    LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...

  9. vue学习目录 vue初识 this指向问题 vue组件传值 过滤器 钩子函数 路由 全家桶 脚手架 vuecli element-ui axios bus

    vue学习目录 vue学习目录 Vue学习一之vue初识 Vue学习二之vue结合项目简单使用.this指向问题 Vue学习三之vue组件 Vue学习四之过滤器.钩子函数.路由.全家桶等 Vue学习之 ...

随机推荐

  1. 【bzoj1066】: [SCOI2007]蜥蜴 图论-最大流

    [bzoj1066]: [SCOI2007]蜥蜴 把石柱拆点,流量为高度 然后S与蜥蜴连流量1的边 互相能跳到的石柱连inf的边 石柱能到边界外的和T连inf的边 然后跑dinic就好了 /* htt ...

  2. 微服务架构下分布式事务解决方案——阿里云GTS

    https://blog.csdn.net/jiangyu_gts/article/details/79470240 1 微服务的发展 微服务倡导将复杂的单体应用拆分为若干个功能简单.松耦合的服务,这 ...

  3. Ajaxa的原生使用方法

    Ajax整合了JavaScript.xml.CSS等现有技术而成,全称为Asynchronous JavaScript And XML,即异步的 JavaScript和xml.它使用了JavaScri ...

  4. 17、OpenCV Python 数字验证码识别

    __author__ = "WSX" import cv2 as cv import numpy as np from PIL import Image import pytess ...

  5. Unity---动画系统学习(6)---Avatar Mask动画融合、Layers动画分层、IK反向动力学

    1. 介绍 Avatar Mask(动画融合) 前面我们一直介绍的都是动画混合,一般用于解决边跑边转弯的问题.而动画融合一般用于解决例如边跑边挥手的问题. 简单说就是让跑步去控制腿的骨骼,挥手控制手的 ...

  6. vue可视化图表 基于Echarts封装好的v-charts简介

    **vue可视化图表 基于Echarts封装好的v-charts** 近期公司又一个新的需求,要做一个订单和销售额统计的项目,需要用到可视化图表来更直观的展示数据.首先我想到的是Echarts,众所周 ...

  7. O(n^2) 级别的排序算法

    o(n^2) 的排序算法.性能那么差,为什么还要学习? 首先,它是基础,千里之行,始于足下.它编码简单,容易实现,是一些简单情景的首选,它能给我们的问题一个暴力的解法,这样的解法也许不是最优的,但是它 ...

  8. JavaWeb学习笔记(五)—— request

    一.request概述 request是Servlet.service()方法的一个参数,类型为javax.servlet.http.HttpServletRequest.在客户端发出每个请求时,服务 ...

  9. redis mac安装配置

    去官网下载redis. 解压后 终端cd 至目标文件夹 编译测试: sudo make test 编译安装: sudo make install 输入redis-server启动服务 停止 redis ...

  10. Word中不能加载EndNote怎么办

    https://jingyan.baidu.com/article/84b4f565ee629d60f6da32cc.html