根据使用情况对加密函数进行分类,如下所示:
- CryptXML 函数
- 签名者函数
- 基本加密函数
- 证书和证书存储函数
- MakeCert 函数
-
证书验证函数
- 使用 CCL 验证函数
- 证书链验证函数
- 消息函数
- 辅助函数
- 证书服务备份和还原函数
- 回调函数
- 目录定义函数
- 目录函数
- WinTrust 函数
- 对象定位器函数
CryptXML 函数
加密 XML 函数提供一个 API,用于使用 XML 格式化数据创建和表示数字签名。 有关 XML 格式化签名的信息,请参阅 https://go.microsoft.com/fwlink/p/?linkid=139649处的 XML-Signature 语法和处理规范。
签名者函数
提供用于签名和时间戳数据的函数。
| 功能 | 描述 |
|---|---|
| SignerFreeSignerContext | 释放上一次对 SignerSignEx 函数的调用分配的 SIGNER_CONTEXT 结构。 |
| SignError | 调用 GetLastError 函数并将返回代码转换为 HRESULT。 |
| SignerSign | 对指定文件进行签名。 |
| SignerSignEx | 对指定的文件进行签名,并返回指向已签名数据的指针。 |
| SignerSignEx2 | 对指定文件进行签名和时间戳,允许多个嵌套签名。 |
| SignerTimeStamp | 时间戳指定主题。 此函数支持 Authenticode 时间戳。 若要执行 X.509 公钥基础结构(RFC 3161)时间戳,请使用 SignerTimeStampEx2 函数。 |
| SignerTimeStampEx | 时间戳指定主题,并选择性地返回指向 SIGNER_CONTEXT 结构的指针,该结构包含指向 BLOB的指针。 此函数支持 Authenticode 时间戳。 若要执行 X.509 公钥基础结构(RFC 3161)时间戳,请使用 SignerTimeStampEx2 函数。 |
| SignerTimeStampEx2 | 时间戳指定主题,并选择性地返回指向 SIGNER_CONTEXT 结构的指针,该结构包含指向 BLOB的指针。 此函数可用于执行 X.509 公钥基础结构、RFC 3161 兼容的时间戳。 |
| SignerTimeStampEx3 | 时间戳指定主题,并支持在多个签名上设置时间戳。 |
基本加密函数
基本加密函数提供开发加密应用程序的最灵活方式。 与 加密服务提供商(CSP)的所有通信都通过这些函数进行。
CSP 是执行所有加密作的独立模块。 每个使用加密函数的应用程序至少需要一个 CSP。 单个应用程序偶尔可以使用多个 CSP。
如果使用了多个 CSP,则可以在 CryptoAPI 加密函数调用中指定要使用的 CSP。 Microsoft基本加密提供程序的一个 CSP 与 CryptoAPI捆绑在一起。 如果未指定其他 CSP,此 CSP 将用作许多 CryptoAPI 函数的默认提供程序。
每个 CSP 都提供对 CryptoAPI 提供的加密支持的不同实现。 有些提供更强大的加密算法;其他组件包含硬件组件,例如 智能卡。 此外,某些 CSP 有时可以直接与用户通信,例如使用用户的 签名私钥执行 数字签名 的时间。
基本加密函数位于以下广泛的组中:
- 服务提供程序函数
- 密钥生成和 Exchange 函数
- 对象编码和解码函数
- 数据加密和解密函数
- 哈希和数字签名函数
服务提供程序函数
应用程序使用以下服务函数连接和断开 加密服务提供商(CSP) 的连接和断开连接。
| 功能 | 描述 |
|---|---|
| CryptAcquireContext |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 获取特定 CSP 中当前用户 密钥容器 的句柄。 |
| CryptContextAddRef |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 递增 HCRYPTPROV 句柄上的 引用计数。 |
| CryptEnumProviders |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 枚举计算机上的提供程序。 |
| CryptEnumProviderTypes |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 枚举计算机上支持的提供程序类型。 |
| CryptGetDefaultProvider |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 确定当前用户的默认 CSP 或指定提供程序类型的计算机。 |
| CryptGetProvParam |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 检索控制 CSP作的参数。 |
| CryptInstallDefaultContext |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 安装以前获取的 HCRYPTPROV 上下文以用作默认上下文。 |
| CryptReleaseContext |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 释放由 CryptAcquireContext 函数获取的句柄。 |
| CryptSetProvider 和 CryptSetProviderEx |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 指定特定 CSP 类型的用户默认 CSP。 |
| CryptSetProvParam |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 指定 CSP 的属性。 |
| CryptUninstallDefaultContext |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 删除以前由 CryptInstallDefaultContext安装的默认上下文。 |
| FreeCryptProvFromCertEx | 将句柄发布到 加密服务提供程序(CSP)或加密 API:下一代(CNG)密钥。 |
密钥生成和 Exchange 函数
密钥生成和交换功能 与其他用户 交换密钥,创建、配置和销毁加密密钥。
| 功能 | 描述 |
|---|---|
| CryptDeriveKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 创建从密码派生的密钥。 |
| CryptDestroyKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 销毁密钥。 |
| CryptDuplicateKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 制作密钥的确切副本,包括密钥的 状态。 |
| CryptExportKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 将密钥从 CSP 传输到应用程序内存空间中的 密钥 BLOB。 |
| CryptGenKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 创建随机密钥。 |
| CryptGenRandom |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 生成随机数据。 |
| CryptGetKeyParam |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 检索密钥的参数。 |
| CryptGetUserKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 获取密钥交换或签名密钥的句柄。 |
| CryptImportKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 将密钥从 密钥 BLOB 传输到 CSP。 |
| CryptSetKeyParam |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 指定键的参数。 |
对象编码和解码函数
这些是通用编码和解码函数。 它们用于证书进行编码和解码,证书吊销列表(CRL)、证书请求和证书扩展。
| 功能 | 描述 |
|---|---|
| CryptDecodeObject | 解码 lpszStructType类型的结构。 |
| CryptDecodeObjectEx | 解码 lpszStructType类型的结构。 CryptDecodeObjectEx 支持单传递内存分配选项。 |
| CryptEncodeObject | 编码类型为 lpszStructType的结构。 |
| CryptEncodeObjectEx | 编码类型为 lpszStructType的结构。 CryptEncodeObjectEx 支持单传递内存分配选项。 |
数据加密和解密函数
以下函数支持加密和解密作。 CryptEncrypt 和 CryptDecrypt 在调用之前需要 加密密钥。 这是通过使用 CryptGenKey、CryptDeriveKey或 CryptImportKey 函数来完成的。 创建密钥时指定加密算法。 CryptSetKeyParam 可以设置其他加密参数。
| 功能 | 描述 |
|---|---|
| CryptDecrypt |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 使用指定的加密密钥解密 密码文本 部分。 |
| CryptEncrypt |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 使用指定的加密密钥加密 纯文本 部分。 |
| CryptProtectData | 对 DATA_BLOB 结构中的数据执行加密。 |
| CryptProtectMemory | 加密内存以保护敏感信息。 |
| CryptUnprotectData | 对 DATA_BLOB中的数据执行解密和完整性检查。 |
| CryptUnprotectMemory | 解密使用 CryptProtectMemory加密的内存。 |
哈希和数字签名函数
这些函数计算 数据 哈希,并创建和验证 数字签名。 哈希也称为消息摘要。
| 功能 | 描述 |
|---|---|
| CryptCreateHash |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 创建空哈希对象。 |
| CryptDestroyHash |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 销毁哈希对象。 |
| CryptDuplicateHash | 复制哈希对象。 |
| CryptGetHashParam | 检索哈希对象参数。 |
| CryptHashData |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 对数据块进行哈希处理,并将其添加到指定的哈希对象。 |
| CryptHashSessionKey |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 对会话密钥进行哈希处理,并将其添加到指定的哈希对象。 |
| CryptSetHashParam |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 设置哈希对象参数。 |
| CryptSignHash |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 对指定的哈希对象进行签名。 |
| CryptUIWizDigitalSign | 显示对文档或 BLOB进行数字签名的向导。 |
| CryptUIWizFreeDigitalSignContext | 释放指向 CRYPTUI_WIZ_DIGITAL_SIGN_CONTEXT 结构的指针。 |
| CryptVerifySignature |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 验证数字签名,给定哈希对象的句柄。 |
| PFNCFILTERPROC | 筛选由 CryptUIWizDigitalSign 函数显示的数字签名向导中显示的证书。 |
证书和证书存储函数
证书和证书存储函数管理 证书的使用、存储和检索、证书吊销列表(CRL)和 证书信任列表(CCL)。 这些函数分为以下组:
- 证书存储函数
- 证书和证书存储维护函数
- 证书函数
- 证书吊销列表函数
- 证书信任列表函数
- 扩展属性函数
- MakeCert 函数
证书存储函数
用户站点可以随着时间的推移收集许多证书。 通常,站点具有站点用户的证书,以及描述用户与之通信的个人和实体的其他证书。 对于每个实体,可以有多个证书。 对于每个单独的证书,应该有一个验证证书链,用于向受信任的 根证书提供回溯。 证书存储 及其相关功能提供存储、检索、枚举、验证和使用证书中存储的信息的功能。
| 功能 | 描述 |
|---|---|
| CertAddStoreToCollection | 将同级证书存储添加到集合证书存储。 |
| CertCloseStore | 关闭证书存储句柄。 |
| CertControlStore | 当缓存存储的内容与保存到存储的存储的内容之间存在差异时,允许应用程序收到通知。 此外,它还提供缓存存储的反台化(如有必要)并提供将缓存存储中所做的更改提交到持久存储的方法。 |
| CertDuplicateStore | 通过递增 引用计数来复制存储句柄。 |
| CertEnumPhysicalStore | 枚举指定系统存储的物理存储。 |
| CertEnumSystemStore | 枚举所有可用的系统存储。 |
| CertEnumSystemStoreLocation | 枚举具有可用系统存储的所有位置。 |
| CertGetStoreProperty | 获取存储属性。 |
| CertOpenStore | 使用指定的存储提供程序类型打开证书存储。 |
| CertOpenSystemStore | 基于子系统协议打开系统证书存储。 |
| CertRegisterPhysicalStore | 将物理存储添加到注册表系统存储集合。 |
| CertRegisterSystemStore | 注册系统存储。 |
| CertRemoveStoreFromCollection | 从集合存储中删除同级证书存储。 |
| CertSaveStore | 保存证书存储。 |
| CertSetStoreProperty | 设置存储属性。 |
| CertUnregisterPhysicalStore | 从指定的系统存储集合中删除物理存储。 |
| CertUnregisterSystemStore | 取消注册指定的系统存储。 |
| CryptUIWizExport | 演示导出证书、证书信任列表(CTL)、证书吊销列表(CRL)或证书存储的向导。 |
| CryptUIWizImport | 提供导入证书、证书信任列表(CTL)、证书吊销列表(CRL)或证书存储的向导。 |
证书和证书存储维护函数
CryptoAPI 提供一组常规证书和证书存储维护功能。
| 功能 | 描述 |
|---|---|
| CertAddSerializedElementToStore | 将序列化的证书或 CRL 元素添加到存储区。 |
| CertCreateContext | 从编码的字节创建指定的上下文。 新上下文未放入存储区。 |
| CertEnumSubjectInSortedCTL | 枚举排序 CTL 上下文中的 TrustedSubject。 |
| CertFindSubjectInCTL | 在 CTL 中查找指定的主题。 |
| CertFindSubjectInSortedCTL | 在排序的 CTL 中查找指定的主题。 |
| OpenPersonalTrustDBDialog 和 OpenPersonalTrustDBDialogEx | 显示 证书 对话框。 |
证书函数
大多数 证书 函数具有相关功能来处理 CRL 和 CCL。 有关相关 CRL 和 CTL 函数的详细信息,请参阅证书吊销列表函数和证书信任列表函数。
证书吊销列表函数
这些函数管理 证书吊销列表(CRL)的存储和检索。
| 功能 | 描述 |
|---|---|
| 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 及其属性。 |
证书信任列表函数
这些函数管理 证书信任列表(CCL)的存储和检索。
| 功能 | 描述 |
|---|---|
| CertAddCTLContextToStore | 将 CTL 上下文添加到证书存储。 |
| CertAddCTLLinkToStore | 将存储区中的链接添加到不同存储中的 CRL 上下文。 |
| CertAddEncodedCTLToStore | 将编码的 CTL 转换为 CTL 上下文,然后将上下文添加到证书存储。 |
| CertCreateCTLContext | 从编码的证书信任列表创建 CTL 上下文。 创建的上下文未放入证书存储中。 |
| CertDeleteCTLFromStore | 从证书存储中删除 CTL。 |
| CertDuplicateCTLContext | 通过递增引用计数来复制 CTL 上下文。 |
| CertEnumCTLsInStore | 枚举证书存储中的 CTL 上下文。 |
| CertFindCTLInStore | 查找与特定条件匹配的证书存储中的第一个或下一个 CTL 上下文。 |
| CertFreeCTLContext | 释放 CTL 上下文。 |
| CertModifyCertificatesToTrust | 根据给定目的修改 CTL 中的证书集。 |
| CertSerializeCTLStoreElement | 序列化 CTL 上下文的编码 CTL 及其属性。 |
扩展属性函数
以下函数适用于证书、CRL 和 CCL 的扩展属性。
| 功能 | 描述 |
|---|---|
| CertEnumCertificateContextProperties | 枚举指定证书上下文的属性。 |
| CertEnumCRLContextProperties | 枚举指定 CRL 上下文的属性。 |
| CertEnumCTLContextProperties | 枚举指定 CTL 上下文的属性。 |
| CertGetCertificateContextProperty | 检索证书属性。 |
| CertGetCRLContextProperty | 检索 CRL 属性。 |
| CertGetCTLContextProperty | 检索 CTL 属性。 |
| CertSetCertificateContextProperty | 设置证书属性。 |
| CertSetCRLContextProperty | 设置 CRL 属性。 |
| CertSetCTLContextProperty | 设置 CTL 属性。 |
MakeCert 函数
以下函数支持 MakeCert 工具。
| 功能 | 描述 |
|---|---|
| FreeCryptProvFromCert | 释放 加密服务提供程序(CSP)的句柄,并选择性地删除由 GetCryptProvFromCert 函数创建的临时容器。 |
| GetCryptProvFromCert | 获取 CSP 的句柄和证书上下文的密钥规范。 |
| PvkFreeCryptProv | 释放 CSP 的句柄,并选择性地删除由 PvkGetCryptProv 函数创建的临时容器。 |
| PvkGetCryptProv | 根据 私钥 文件名或密钥容器名称获取 CSP 的句柄。 |
| PvkPrivateKeyAcquireContextFromMemory | 在 CSP 中创建临时容器,并将私钥从内存加载到容器中。 |
| PvkPrivateKeySave | 将私钥及其相应的 公钥 保存到指定的文件中。 |
| SignError | 调用 GetLastError 并将返回代码转换为 HRESULT。 |
证书验证函数
证书使用 CCL 或证书链进行验证。 这两个函数都提供:
- 使用 CCL 的验证函数
- 证书链验证函数
使用 CCL 的验证函数
这些函数在验证过程中使用 CCL。 可以在证书信任列表函数和扩展属性函数中找到用于处理 CCL 的其他函数。
以下函数直接使用 CCL 进行验证。
| 功能 | 描述 |
|---|---|
| CertVerifyCTLUsage | 验证 CTL 的用法。 |
| CryptMsgEncodeAndSignCTL | 将 CTL 编码并签名为消息。 |
| CryptMsgGetAndVerifySigner | 从消息中检索和验证 CTL。 |
| CryptMsgSignCTL | 对包含 CTL 的消息进行签名。 |
证书链验证函数
证书链旨在提供有关单个证书的信任信息。
| 函数名称 | 描述 |
|---|---|
| CertCreateCertificateChainEngine | 为应用程序创建新的非默认链引擎。 |
| CertCreateCTLEntryFromCertificateContextProperties | 创建一个 CTL 条目,其属性是证书上下文的属性。 |
| CertDuplicateCertificateChain | 通过递增链的 引用计数 并返回指向链的指针来复制证书链。 |
| CertFindChainInStore | 查找存储区中的第一个或下一个证书链上下文。 |
| CertFreeCertificateChain | 通过减少证书的引用计数释放证书链。 |
| CertFreeCertificateChainEngine | 释放非默认证书链引擎。 |
| CertFreeCertificateChainList | 释放指向链上下文的指针数组。 |
| CertGetCertificateChain | 生成从结束证书开始的链上下文,并尽可能返回到受信任的 根证书。 |
| CertIsValidCRLForCertificate | 检查 CRL 以确定是否在吊销该证书时包含特定证书。 |
| CertSetCertificateContextPropertiesFromCTLEntry | 使用 CTL 条目中的属性设置证书上下文中的属性。 |
| CertVerifyCertificateChainPolicy | 检查证书链以验证其有效性,包括其符合任何指定的有效性策略条件。 |
消息函数
CryptoAPI 消息函数由两组函数组成:低级别消息函数和 简化的消息函数。
低级别消息函数直接创建并处理 PKCS #7 消息。 这些函数对 PKCS #7 数据进行编码,以便传输和解码收到的 PKCS #7 数据。 它们还会解密并验证收到的消息的签名。 有关 PKCS #7 标准和低级别消息的概述,请参阅 低级别消息。
简化的消息函数处于较高级别,并将多个低级别消息函数和证书函数包装成以特定方式执行特定任务的单个函数。 这些函数减少了完成任务所需的函数调用数,从而简化了 CryptoAPI 的使用。 有关简化消息的概述,请参阅 简化的消息。
- 低级别消息函数
- 简化的消息函数
低级别消息函数
低级别消息函数提供编码数据以传输和解码收到的 PKCS #7 消息所需的功能。 还提供了用于解密和验证已接收消息签名的功能。 不建议在大多数应用程序中使用这些低级别消息函数。 对于大多数应用程序,首选使用将多个低级别消息函数包装成单个函数调用的简化消息函数。
| 功能 | 描述 |
|---|---|
| CryptMsgCalculateEncodedLength | 计算编码的加密消息的长度。 |
| CryptMsgClose | 关闭加密消息的句柄。 |
| CryptMsgControl | 在编码或解码的加密消息的最终 CryptMsgUpdate 后执行特殊控制函数。 |
| CryptMsgCountersign | 对消息中已有的签名进行反签名。 |
| CryptMsgCountersignEncoded | 根据 PKCS #7 的定义,对已存在的签名进行反签名(编码的 SignerInfo)。 |
| CryptMsgDuplicate | 通过递增 引用计数来复制加密消息句柄。 引用计数跟踪消息的生存期。 |
| CryptMsgGetParam | 在编码或解码加密消息后获取参数。 |
| CryptMsgOpenToDecode | 打开用于解码的加密消息。 |
| CryptMsgOpenToEncode | 打开用于编码的加密消息。 |
| CryptMsgUpdate | 更新加密消息的内容。 |
| CryptMsgVerifyCountersignatureEncoded | 根据 SignerInfo 结构(由 PKCS #7 定义)验证 反符号。 |
| CryptMsgVerifyCountersignatureEncodedEx | 验证 pbSignerInfoCounterSignature 参数是否包含 pbSignerInfo 参数结构的 encryptedDigest 字段的加密 哈希。 |
简化的消息函数
简化的消息函数 将低级消息函数包装成单个函数来完成指定的任务。
| 功能 | 描述 |
|---|---|
| CryptDecodeMessage | 解码加密消息。 |
| CryptDecryptAndVerifyMessageSignature | 解密指定的消息,并验证签名者。 |
| CryptDecryptMessage | 解密指定的消息。 |
| CryptEncryptMessage | 加密收件人或收件人的邮件。 |
| CryptGetMessageCertificates | 返回 证书存储,其中包含消息的证书和 CRL。 |
| CryptGetMessageSignerCount | 返回已签名消息中的签名者计数。 |
| CryptHashMessage | 创建消息的哈希。 |
| CryptSignAndEncryptMessage | 对邮件进行签名,然后将其加密给收件人或收件人。 |
| CryptSignMessageWithKey | 使用 CSP 的私钥对函数的参数中指定的消息进行签名。 |
| CryptSignMessage | 对消息进行签名。 |
| CryptVerifyDetachedMessageHash | 验证包含分离哈希的哈希的哈希消息。 |
| CryptVerifyDetachedMessageSignature | 验证包含分离签名或签名的已签名消息。 |
| CryptVerifyMessageHash | 验证哈希消息。 |
| CryptVerifyMessageSignature | 验证已签名的消息。 |
| CryptVerifyMessageSignatureWithKey | 使用指定的公钥信息验证已签名邮件的签名。 |
辅助函数
辅助函数按如下所示进行分组:
- 数据管理函数
- 数据转换函数
- 增强型密钥用法函数
- 密钥标识符函数
- OID 支持函数
- 远程对象检索函数
- PFX 函数
数据管理函数
以下 CryptoAPI 函数管理数据和证书。
| 功能 | 描述 |
|---|---|
| CertCompareCertificate | 比较两个证书以确定它们是否相同。 |
| CertCompareCertificateName | 比较两个证书名称,以确定它们是否相同。 |
| CertCompareIntegerBlob | 比较两个整数 BLOB。 |
| CertComparePublicKeyInfo | 比较两个 公钥 以确定它们是否相同。 |
| CertFindAttribute | 查找由其 对象标识符(OID)标识的第一个属性。 |
| CertFindExtension | 查找由其 OID 标识的第一个扩展。 |
| CertFindRDNAttr | 在 相对可分辨名称的名称列表中查找由其 OID 标识的第一个 RDN 属性。 |
| CertGetIntendedKeyUsage | 从证书获取预期的密钥使用字节数。 |
| CertGetPublicKeyLength | 从 公钥 BLOB获取公钥/私钥的位长度。 |
| CertIsRDNAttrsInCertificateName | 将 证书名称 中的属性与指定的 CERT_RDN 进行比较,以确定是否包含所有属性。 |
| CertIsStrongHashToSign | 确定签名证书中的指定哈希算法和公钥是否可用于执行强签名。 |
| CertVerifyCRLRevocation | 验证使用者证书是否不在 证书吊销列表 (CRL) 上。 |
| CertVerifyCRLTimeValidity | 验证 CRL 的时间有效性。 |
| CertVerifyRevocation | 验证使用者证书是否不在 CRL 上。 |
| CertVerifyTimeValidity | 验证证书的时间有效性。 |
| CertVerifyValidityNesting | 验证使用者的时间有效性是否嵌套在颁发者的时间有效期内。 |
| CryptExportPKCS8 | 此函数由 CryptExportPKCS8Ex 函数取代。 |
| CryptExportPKCS8Ex | 以 PKCS #8 格式导出私钥。 |
| CryptExportPublicKeyInfo | 导出与提供程序的相应私钥关联的公钥信息。 |
| CryptExportPublicKeyInfoEx | 导出与提供程序的相应私钥关联的公钥信息。 此函数不同于 CryptExportPublicKeyInfo,即用户可以指定公钥算法,从而替代 CSP 提供的默认算法。 |
| CryptExportPublicKeyInfoFromBCryptKeyHandle | 导出与提供程序的相应私钥关联的公钥信息。 |
| CryptFindCertificateKeyProvInfo | 枚举加密提供程序及其 密钥容器 以查找与证书公钥对应的私钥。 |
| CryptFindLocalizedName | 查找指定名称的本地化名称,例如,查找根系统的存储名称的本地化名称。 |
| CryptHashCertificate |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 对编码的内容进行哈希处理。 |
| CryptHashCertificate2 | 使用加密 API 对数据块进行哈希处理:下一代 (CNG) 哈希提供程序。 |
| CryptHashPublicKeyInfo |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 计算编码公钥信息的哈希。 |
| CryptHashToBeSigned |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 计算编码签名内容(CERT_SIGNED_CONTENT_INFO)中“要签名”信息的哈希。 |
| CryptImportPKCS8 |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 将 PKCS #8 格式的 私钥 导入 加密服务提供商(CSP)。 |
| CryptImportPublicKeyInfo |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 将公钥信息转换为提供程序,并返回公钥的句柄。 |
| CryptImportPublicKeyInfoEx |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 将公钥信息转换为提供程序,并返回公钥的句柄。 提供可用于替代默认值的其他参数(通过 CryptImportPublicKeyInfo指定的参数来补充 CERT_PUBLIC_KEY_INFO。 |
| CryptImportPublicKeyInfoEx2 | 将公钥导入 CNG 非对称提供程序。 |
| CryptMemAlloc | 为缓冲区分配内存。 此内存由返回已分配缓冲区的所有 Crypt32.lib 函数使用。 |
| CryptMemFree | 释放由 CryptMemAlloc 或 CryptMemRealloc分配的内存。 |
| CryptMemRealloc | 释放当前为缓冲区分配的内存,并为新缓冲区分配内存。 |
| CryptQueryObject |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 检索有关 BLOB 或文件的内容的信息。 |
| CryptSignAndEncodeCertificate | 对“待签名”信息进行编码,对此编码信息进行签名,并编码生成的已签名、编码的信息。 |
| CryptSignCertificate | 在已编码的已签名内容中对“待签名”信息进行签名。 |
| CryptSIPAddProvider | 添加使用者接口包(SIP)。 |
| CryptSIPCreateIndirectData | 返回一个 SIP_INDIRECT_DATA 结构,该结构包含提供的 SIP_SUBJECTINFO 结构、摘要算法和编码属性的 哈希。 哈希可用作对数据的间接引用。 |
| CryptSIPGetCaps | 检索 SIP 的功能。 |
| CryptSIPGetSignedDataMsg | 从文件中检索验证码签名。 |
| CryptSIPLoad | 加载实现主题接口包的动态链接库,并将相应的库导出函数分配给 SIP_DISPATCH_INFO 结构。 |
| CryptSIPPutSignedDataMsg | 将验证码签名存储在目标文件中。 |
| CryptSIPRemoveProvider | 删除上一次调用 CryptSIPAddProvider 函数添加的 SIP。 |
| CryptSIPRemoveSignedDataMsg | 删除指定的 Authenticode 签名。 |
| CryptSIPRetrieveSubjectGuid | 根据指定文件中的标头信息检索 GUID。 |
| CryptSIPRetrieveSubjectGuidForCatalogFile | 检索与指定文件关联的主题 GUID。 |
| CryptSIPVerifyIndirectData | 根据提供的主题验证间接哈希数据。 |
| CryptUpdateProtectedState | 在用户 安全标识符(SID)更改后迁移当前用户的主密钥。 |
| CryptVerifyCertificateSignature | 使用公钥信息验证使用者证书或 CRL 的签名。 |
| CryptVerifyCertificateSignatureEx | CryptVerifyCertificateSignature的扩展版本。 |
| GetEncSChannel | 将加密的 Schannel DLL 内容存储在内存中。 |
| pCryptSIPGetCaps | 由 SIP 实现以报告功能。 |
数据转换函数
以下 CryptoAPI 函数将证书结构成员转换为不同的形式。
| 功能 | 描述 |
|---|---|
| CertAlgIdToOID | 将 CryptoAPI 算法标识符(ALG_ID)转换为 抽象语法表示法一(ASN.1)对象标识符 (OID) 字符串。 |
| CertGetNameString | 从证书获取使用者或颁发者名称,并将其转换为以 null 结尾的字符串。 |
| CertNameToStr | 将证书名称 BLOB 转换为零终止字符串。 |
| CertOIDToAlgId | 将 ASN.1 对象标识符字符串转换为 CSP 算法标识符。 |
| CertRDNValueToStr | 将 Name 值转换为以 null 结尾的字符串。 |
| CertStrToName | 将以 null 结尾的 X.500 字符串转换为编码的证书名称。 |
| CryptBinaryToString | 将二进制序列转换为格式化字符串。 |
| CryptFormatObject | 设置编码数据的格式,并返回 Unicode 字符串。 |
| CryptStringToBinary | 将格式化字符串转换为二进制序列。 |
增强型密钥用法函数
以下函数处理 增强型密钥使用(EKU)扩展和证书的 EKU 扩展属性。 EKU 扩展和扩展属性指定并限制证书的有效使用。 扩展是证书本身的一部分。 它们由证书的颁发者设置,并且是只读的。 证书扩展属性是与可在应用程序中设置的证书关联的值。
| 功能 | 描述 |
|---|---|
| CertAddEnhancedKeyUsageIdentifier | 将使用情况标识符添加到证书的 EKU 属性。 |
| CertGetEnhancedKeyUsage | 从证书获取有关 EKU 扩展或属性的信息。 |
| CertRemoveEnhancedKeyUsageIdentifier | 从证书的 EKU 扩展属性中删除使用标识符。 |
| CertSetEnhancedKeyUsage | 设置证书的 EKU 属性。 |
密钥标识符函数
密钥标识符函数允许用户创建、设置、检索或查找密钥标识符或其属性。
密钥标识符是公钥/私钥对的唯一标识符。 它可以是任何唯一标识符,但通常是编码 CERT_PUBLIC_KEY_INFO 结构的 20 字节 SHA1 哈希。 可以通过证书的CERT_KEY_IDENTIFIER_PROP_ID获取密钥标识符。 密钥标识符允许使用该 密钥对 加密或解密消息,而无需使用证书。
密钥标识符可以具有与证书上下文相同的属性。 有关详细信息,请参阅 CertCreateContext。
| 功能 | 描述 |
|---|---|
| CryptCreateKeyIdentifierFromCSP |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 从 CSP 的 公钥 BLOB创建密钥标识符。 |
| CryptEnumKeyIdentifierProperties | 枚举密钥标识符及其属性。 |
| CryptGetKeyIdentifierProperty |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 从指定的密钥标识符获取特定属性。 |
| CryptSetKeyIdentifierProperty |
重要提示: 此 API 已弃用。 新的和现有的软件应开始使用 加密下一代 API。 Microsoft可能会在将来的版本中删除此 API。 设置指定密钥标识符的属性。 |
OID 支持函数
这些函数提供 对象标识符(OID)支持。 这些函数安装、注册和调度到 OID 和编码特定于类型的函数。
以下 CryptoAPI 函数使用以下 OID 支持函数:
- CryptEncodeObject
- CryptEncodeObjectEx
- CryptDecodeObject
- CryptDecodeObjectEx
- CertVerifyRevocation
- CertOpenStore
有关此过程的概述,请参阅 扩展 CryptoAPI 功能。
以下函数适用于 OID。
| 功能 | 描述 |
|---|---|
| CryptEnumOIDFunction | 枚举由其编码类型、函数名称和 OID 标识的已注册 OID 函数。 |
| CryptEnumOIDInfo | 枚举其组标识的已注册 OID 信息,并调用 pfnEnumOIDInfo 进行匹配。 |
| CryptFindOIDInfo | 使用指定的键和组查找 OID 信息。 |
| CryptFreeOIDFunctionAddress | 释放由 CryptGetOIDFunctionAddress 或 CryptGetDefaultOIDFunctionAddress递增并返回的句柄计数。 |
| CryptGetDefaultOIDDllList | 获取指定函数集和编码类型的已注册默认 DLL 条目的列表。 |
| CryptGetDefaultOIDFunctionAddress | 获取第一个或下一个安装的默认函数,或加载包含默认函数的 DLL。 |
| CryptGetOIDFunctionAddress | 在已安装的函数列表中搜索编码类型和 OID 匹配项。 如果未找到匹配项,注册表将搜索匹配项。 |
| CryptGetOIDFunctionValue | 获取指定编码类型、函数名称、OID 和值名称的值。 |
| CryptInitOIDFunctionSet | 初始化并返回由提供的函数名称标识的 OID 函数集的句柄。 |
| CryptInstallOIDFunctionAddress | 安装一组可调用的 OID 函数地址。 |
| CryptRegisterDefaultOIDFunction | 注册包含要为指定编码类型和函数名称调用的默认函数的 DLL。 |
| CryptRegisterOIDFunction | 注册包含要为指定编码类型、函数名称和 OID 调用的函数的 DLL。 |
| CryptRegisterOIDInfo | 注册 CRYPT_OID_INFO 结构中指定的 OID 信息,并将其保存到注册表。 |
| CryptSetOIDFunctionValue | 设置指定编码类型、函数名称、OID 和值名称的值。 |
| CryptUnregisterDefaultOIDFunction | 删除 DLL 的注册,该 DLL 包含要为指定的编码类型和函数名称调用的默认函数。 |
| CryptUnregisterOIDFunction | 删除 DLL 的注册,该 DLL 包含要为指定的编码类型、函数名称和 OID 调用的函数。 |
| CryptUnregisterOIDInfo | 删除指定 OID 信息的注册。 |
远程对象检索函数
以下函数允许用户检索公钥基础结构 (PKI) 对象、获取证书、CTL 或 CRL 的 URL,或从对象中提取 URL。
| 功能 | 描述 |
|---|---|
| CryptGetObjectUrl | 从证书、CTL 或 CRL 获取远程对象的 URL。 |
| CryptRetrieveObjectByUrl | 从 URL 指定的位置检索 PKI 对象。 |
PFX 函数
以下函数支持个人信息交换(PFX)格式 BLOB。
| 功能 | 描述 |
|---|---|
| PFXExportCertStore | 从引用的 证书存储导出 证书,如果可用,则关联的私钥。 |
| PFXExportCertStoreEx | 从引用的证书导出存储证书,如果可用,则存储其关联的私钥。 |
| PFXImportCertStore | 导入 PFX BLOB,并返回包含证书和任何关联的私钥的存储的句柄。 |
| PFXIsPFXBlob | 尝试将 BLOB 的外部层解码为 PFX 数据包。 |
| PFXVerifyPassword | 尝试将 BLOB 的外部层解码为 PFX 数据包,并使用给定的密码对其进行解密。 |
证书服务备份和还原函数
证书服务包括用于备份和还原证书服务数据库的函数。 这些证书服务备份和还原功能包含在 Certadm.dll中。 与其他与证书服务关联的 API 元素不同,这些函数不会封装在可用于调用类方法的对象中。 相反,备份和还原 API 通过调用 LoadLibrary,然后通过调用 getProcAddress来确定函数的地址,从而首先将 Certadm.dll 库加载到内存中。 调用完证书服务备份和还原函数后,请调用 FreeLibrary,以从内存中释放 Certadm.dll 资源。
注意
Certadm.dll 提供的备份和还原功能不会备份或还原证书服务的 私钥。 有关备份证书服务私钥的信息,请参阅 备份和还原证书服务私钥。
注意
如果以前在用于调用证书服务备份和还原 API 的同一线程中调用 CoInitializeEx,则必须将COINIT_APARTMENTTHREADED标志传递给 CoInitializeEx。 也就是说,使用同一线程时,如果线程之前在调用 CoInitializeEx中传入了COINIT_MULTITHREADED标志,则无法调用证书服务备份和还原 API。
证书服务备份 API 在 Certbcli.h 中定义。 但是,创建程序时,请使用 Certsrv.h 作为包含文件。
以下 API 由 Certadm.dll导出。
| 功能 | 描述 |
|---|---|
| CertSrvBackupClose | 关闭打开的文件。 |
| CertSrvBackupEnd | 结束备份会话。 |
| CertSrvBackupFree | 释放备份和还原 API 分配的缓冲区。 |
| CertSrvBackupGetBackupLogs | 返回需要备份的日志文件列表。 |
| CertSrvBackupGetDatabaseNames | 返回需要备份的数据库文件的列表。 |
| CertSrvBackupGetDynamicFileList | 检索需要备份给定备份上下文的证书服务动态文件名列表。 |
| CertSrvBackupOpenFile | 打开一个文件,以准备备份它。 |
| CertSrvBackupPrepare | 为联机备份准备数据库。 |
| CertSrvBackupRead | 读取打开的文件的内容。 |
| CertSrvBackupTruncateLogs | 截断日志文件。 |
| CertSrvIsServerOnline | 确定证书服务服务器是否处于联机状态(主动运行)。 |
| CertSrvRestoreEnd | 结束还原会话。 |
| CertSrvRestoreGetDatabaseLocations | 检索数据库位置(用于备份和还原方案)。 |
| CertSrvRestorePrepare | 开始还原会话。 |
| CertSrvRestoreRegister | 注册还原作。 |
| CertSrvRestoreRegisterComplete | 完成以前注册的还原作。 |
| CertSrvRestoreRegisterThroughFile | 注册还原作。 |
| CertSrvServerControl | 将控制命令发送到证书服务实例。 |
回调函数
本部分中的回调函数用于注册或安装应用程序定义的 证书存储 提供程序,并通过回调函数提供相关功能。 回调函数由应用程序实现,CryptoAPI 函数调用。 回调函数使应用程序能够控制 CryptoAPI 函数处理数据的方式。
目录定义函数
这些函数用于创建目录。 所有这些函数都由 makeCat 调用。
| 功能 | 描述 |
|---|---|
| CryptCATCDFClose | 关闭目录定义文件,并为相应的 CRYPTCATCDF 结构释放内存。 |
| CryptCATCDFEnumAttributesWithCDFTag | 枚举 CDF 的 CatalogFiles 节中成员文件的属性。 |
| CryptCATCDFEnumCatAttributes | 枚举 CDF 的 CatalogHeader 节中的目录级属性。 |
| CryptCATCDFEnumMembersByCDFTagEx | 枚举 CDF 的 CatalogFiles 节中的单个文件成员。 |
| CryptCATCDFOpen | 打开一个用于读取的现有 CDF,并初始化 CRYPTCATCDF 结构。 |
目录函数
这些函数用于管理目录。
WinTrust 函数
以下函数用于执行各种信任作。
| 功能 | 描述 |
|---|---|
| WintrustAddActionID | 将信任提供程序作添加到用户的系统中。 |
| WintrustGetRegPolicyFlags | 检索策略提供程序的策略标志。 |
| WintrustAddDefaultForUsage | 指定提供程序的默认使用标识符和回调信息 |
| WintrustGetDefaultForUsage | 检索默认的使用标识符和回调信息。 |
| WintrustLoadFunctionPointers | 加载指定作 GUID 的函数入口点。 |
| WintrustRemoveActionID | 删除由 WintrustAddActionID 函数添加的作。 |
| WintrustSetDefaultIncludePEPageHashes | 设置默认设置,用于确定在为可移植可执行文件创建主题接口包(SIP)间接数据时是否包括页面哈希。 |
| WintrustSetRegPolicyFlags | 设置策略提供程序的策略标志。 |
| WinVerifyTrust | 对指定对象执行信任验证作。 |
| WinVerifyTrustEx | 对指定对象执行信任验证作,并获取指向WINTRUST_DATA结构的指针。 |
| WTHelperCertCheckValidSignature | 检查签名是否有效。 |
| WTHelperCertFindIssuerCertificate | 从与指定使用者证书匹配的指定证书存储中查找颁发者证书。 |
| WTHelperCertIsSelfSigned | 检查证书是否自签名。 |
| WTHelperGetFileHash | 验证已签名文件的签名,并获取文件的哈希值和算法标识符。 |
| WTHelperGetProvCertFromChain | 从证书链中检索信任提供程序证书。 |
| WTHelperGetProvPrivateDataFromChain | 使用提供程序 ID 从链接收 CRYPT_PROVIDER_PRIVDATA 结构。 |
| WTHelperGetProvSignerFromChain | 从链中按索引检索签名者或计数器符号。 |
| WTHelperProvDataFromStateData | 从指定的句柄检索信任提供程序信息。 |
对象定位符函数
以下回调函数可由安全通道(Schannel)安全包调用的自定义提供程序实现,以检索证书。
| 功能 | 描述 |
|---|---|
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FLUSH | 指定对象已更改。 |
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_GET | 检索对象。 |
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_RELEASE | 释放提供程序。 |
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_PASSWORD | 释放用于加密 PFX 字节数组的密码。 |
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE | 释放提供程序返回的对象。 |
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_FREE_IDENTIFIER | 释放对象标识符的内存。 |
| PFN_CRYPT_OBJECT_LOCATOR_PROVIDER_INITIALIZE | 初始化提供程序。 |