CSP学习之CryptoAPI初识
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初识的更多相关文章
- 二、Android学习第二天——初识Activity(转)
		
(转自:http://wenku.baidu.com/view/af39b3164431b90d6c85c72f.html) 一. Android学习第二天——初识Activity 昨天程序搭建成功以 ...
 - Java学习-027-JSON 之一 -- 初识
		
通常,我们在生活中使用的应用产品(无论是 Web应用还是 App 应用),又或者我们平常的信息交流,均无可避免的存在着信息交互,在信息交互的过程中就有着信息载体的存在.那么,在我们熟知的网络应用产品中 ...
 - WPF学习之路初识
		
WPF学习之路初识 WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...
 - Storm学习笔记 - Storm初识
		
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
 - [转]git学习------>git-rev-parse命令初识
		
git学习------>git-rev-parse命令初识 2017年06月13日 10:04:13 阅读数:2172 一.准备工作 第一步:在d盘git test目录下,新建工作区根目录dem ...
 - Spring 学习记录8 初识XmlWebApplicationContext(2)
		
主题 接上文Spring 学习记录7 初识XmlWebApplicationContext refresh方法 refresh方法是定义在父类AbstractApplicationContext中的. ...
 - CSP:使用CryptoAPI解码X509证书内容
		
微软的CryptoAPI提供了一套解码X509证书的函数,一个X509证书解码之后,得到一个PCCERT_CONTEXT类型的结构体指针. 通过该结构体,我们就能够获取想要的证书项和属性等. X509 ...
 - LevelDB学习笔记 (1):初识LevelDB
		
LevelDB学习笔记 (1):初识LevelDB 1. 写在前面 1.1 什么是levelDB LevelDB就是一个由Google开源的高效的单机Key/Value存储系统,该存储系统提供了Key ...
 - vue学习目录 vue初识 this指向问题 vue组件传值 过滤器 钩子函数 路由 全家桶 脚手架 vuecli element-ui   axios bus
		
vue学习目录 vue学习目录 Vue学习一之vue初识 Vue学习二之vue结合项目简单使用.this指向问题 Vue学习三之vue组件 Vue学习四之过滤器.钩子函数.路由.全家桶等 Vue学习之 ...
 
随机推荐
- Django 实现购物车功能
			
购物车思路:使用 session 功能识别不同浏览器用户,使得用户不管是否登录了网站,均能够把想要购买的产品放在某个地方,之后随时可以显示或修改要购买的产品,等确定了之后再下订单,购物车可以用来暂存商 ...
 - 搭建 docker + nginx + keepalived 实现Web应用的高可用(亲测)
			
1. 环境准备 下载 VMware : https://www.vmware.com/go/getplayer-win 下载 Centos : https://mirrors.a ...
 - Linux 使用echo向文件末尾追加命令
			
//echo后边用单引号包围要添加的内容 echo 'add content'>>/home/data/test.sh 注意>>表示在原来的文件末尾上进行追加,如果使用的是&g ...
 - Vue 使用 axios post请求后台数据时 404
			
今天遇到Vue 使用 axios post请求后台数据时 404 使用postman 就能获取到 网上找了大半天 终于找到了解决方法,传送门:https://www.jianshu.com/p/b10 ...
 - selenium定位不到元素
			
selenium定位不到元素时,网上大部分查到都是iFrame的切换问题,然后是多窗口.句柄的处理问题, 在初学是遇到定位不到元素,一直在找上面的问题,发现都不是上面的问题, 后来才发现是页面刷新的问 ...
 - C++_类继承2-多态公有继承
			
有时候希望同一个方法在派生类和基类中的行为是不同的.换句话说,方法的行为取决于调用该方法的对象.这种较复杂的行为称为多态——具有多种形态.即同一种方法其行为随上下文而异.有两种重要的机制可用于实现多态 ...
 - 危险系数(枚举点+bfs)--------蓝桥备战系列
			
标题:危险系数 抗日战争时期,冀中平原的地道战曾发挥重要作用. 地道的多个站点间有通道连接,形成了庞大的网络.但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系. 我们来定 ...
 - BZOJ - 4260 01字典树+前后缀
			
题意:给定\(a[1...n]\),求\((a_i⊕a_i+1⊕...⊕a_j)+(a_p⊕a_{p+1}⊕...⊕a_{q})\)的最大值,其中\(1≤i≤j<p≤q≤n\) 前后缀最优解预处 ...
 - JOB&paper
			
我突然想到,不管我最终有没有获得一份可观的工作,但是每个公司都最终会收到我的一份简历 (3)熟悉面向对象编程: (4)熟悉TCP/IP, Http等网络协议和网络编程: 2.熟练掌握MFC.STL ...
 - Putty之public key ssh认证入门
			
1.工作平台 客户端:Win2kEn Sp3,Putty Beta 0.53 服务器:RedHat72,OpenSSH_3.4p1 2.Putty简介 一个免费小巧的Win32平台下的ssh客户端.它 ...