CryptFindOIDInfo 函数 (wincrypt.h)

CryptFindOIDInfo 函数检索与指定键类型和键匹配的第一个预定义或注册CRYPT_OID_INFO结构。 搜索可以限制为指定 OID 组中 的对象标识符 (OID) 。

使用 CryptEnumOIDInfo 列出 CRYPT_OID_INFO 结构的所有或选定子集。 可以使用 CryptRegisterOIDInfo 注册新的CRYPT_OID_INFO结构。 可以使用 CryptUnregisterOIDInfo 从已注册的 OID 列表中删除用户注册的 OID。

新的 OID 可以放在预定义条目之前或之后的已注册 OID 列表中。 由于 CryptFindOIDInfo 返回列表上与搜索条件匹配的第一个键,因此新注册的 OID 放置在具有相同键的预定义 OID 条目之前会替代预定义项。

语法

PCCRYPT_OID_INFO CryptFindOIDInfo(
  [in] DWORD dwKeyType,
  [in] void  *pvKey,
  [in] DWORD dwGroupId
);

参数

[in] dwKeyType

指定查找 OID 信息时要使用的键类型。

此参数可以是以下键类型之一。

CRYPT_OID_INFO_OID_KEY

pvKey 是包含要查找的 OID 字符串的以 null 结尾的 ANSI 字符串的地址。

CRYPT_OID_INFO_NAME_KEY

pvKey 是包含要查找的名称的以 null 结尾的 Unicode 字符串的地址。

CRYPT_OID_INFO_ALGID_KEY

pvKeyALG_ID变量的 地址。 支持以下 ALG_ID

哈希算法:

对称加密算法:

公钥算法:

使用加密 API 支持未列出的算法 :下一代 (CNG 仅) ;请改用 CRYPT_OID_INFO_CNG_ALGID_KEY

CRYPT_OID_INFO_SIGN_KEY

pvKey 是两个 ALG_ID数组的地址,其中第一个元素包含哈希算法标识符,第二个元素包含公钥算法标识符。

支持以下 ALG_ID 组合。

签名算法标识符 哈希算法标识符
CALG_RSA_SIGN
CALG_SHA1
CALG_MD5
CALG_MD4
CALG_MD2
CALG_DSS_SIGN
CALG_SHA1
CALG_NO_SIGN
CALG_SHA1
CALG_NO_SIGN
 

未列出的算法仅通过 CNG 受支持;请改用 CRYPT_OID_INFO_CNG_SIGN_KEY

CRYPT_OID_INFO_CNG_ALGID_KEY

pvKey 是包含要查找的 CNG 算法标识符的以 null 结尾的 Unicode 字符串的地址。 这可以是预定义的 CNG 算法标识符 之一,也可以是另一个已注册的算法标识符。

Windows Server 2003 R2 Windows Server 2003: 不支持此密钥类型。

CRYPT_OID_INFO_CNG_SIGN_KEY

pvKey 是两个以 null 结尾的 Unicode 字符串指针数组的地址,其中第一个字符串包含哈希 CNG 算法标识符,第二个字符串包含公钥 CNG 算法标识符。 这些标识符可以来自预定义的 CNG 算法标识符 或其他已注册的算法标识符。

Windows Server 2003 R2 Windows Server 2003: 不支持此密钥类型。

(可选)可以使用逻辑 OR 运算符在 dwKeyType 参数中指定以下键类型 (|) 。

含义
CRYPT_OID_INFO_PUBKEY_SIGN_KEY_FLAG
跳过CRYPT_PUBKEY_ALG_OID_GROUP_ID组中使用CRYPT_OID_PUBKEY_ENCRYPT_ONLY_FLAG标志显式标记的公钥。
CRYPT_OID_INFO_PUBKEY_ENCRYPT_KEY_FLAG
跳过CRYPT_PUBKEY_ALG_OID_GROUP_ID组中使用CRYPT_OID_PUBKEY_SIGN_ONLY_FLAG标志显式标记的公钥。

[in] pvKey

包含其他搜索信息的缓冲区的地址。 此参数取决于 dwKeyType 参数的值。 有关详细信息,请参阅 dwKeyType 下的表。

[in] dwGroupId

查找 OID 信息时要使用的组标识符。 将此参数设置为零会根据 dwKeyType 参数搜索所有组。 否则,仅搜索指示的 dwGroupId

有关按组标识符列出 OID 信息的代码的信息,请参阅 CryptEnumOIDInfo

(可选)可以使用逻辑 OR 运算符在 dwGroupId 参数中指定以下标志 (|) 。

含义
CRYPT_OID_DISABLE_SEARCH_DS_FLAG
禁用搜索目录服务器。
 

可以使用逻辑 OR 运算符在 dwGroupId 参数中指定左移 16 位的位长度 (|) 。 有关详细信息,请参阅“备注”。

返回值

返回指向 CRYPT_OID_INFO 类型的常量结构的指针。 不得释放返回的指针。 如果未找到指定的键和组,则返回 NULL

注解

CryptFindOIDInfo 函数在 Active Directory 中执行查找,以在以下条件下检索 OID 的友好名称:

  • dwKeyType 参数中的键类型设置为CRYPT_OID_INFO_OID_KEYCRYPT_OID_INFO_NAME_KEY
  • 未在 dwGroupId 参数中指定组标识符,或者 GroupID 引用 EKU OID、策略 OID 或模板 OID。
可以通过使用 CRYPT_OID_DISABLE_SEARCH_DS_FLAG 标志调用 函数来禁止对友好名称 的网络 检索。

可以使用逻辑 OR 运算符在 dwGroupId 参数中指定左移 16 位的位长度 (|) 。 这仅适用于 在 CRYPT_OID_INFO 结构的 ExtraInfo 成员中指定的位长度 的CRYPT_ENCRYPT_ALG_OID_GROUP_ID 组条目。 目前,只有 AES 加密算法具有此功能。 常 量CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT 可用于执行移位。 例如,若要查找位长度等于 192 的BCRYPT_AES_ALGORITHM 的 OID 信息,请调用 CryptFindOIDInfo ,如下所示。


DWORD dwBitLen = 192;

PCCRYPT_OID_INFO pOIDInfo = CryptFindOIDInfo(
     CRYPT_OID_INFO_CNG_ALGID_KEY,
     (void *) BCRYPT_AES_ALGORITHM,
     CRYPT_ENCRYPT_ALG_OID_GROUP_ID |
         (dwBitLen << CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT)
     );


要求

要求
最低受支持的客户端 Windows XP [桌面应用 | UWP 应用]
最低受支持的服务器 Windows Server 2003 [桌面应用 | UWP 应用]
目标平台 Windows
标头 wincrypt.h
Library Crypt32.lib
DLL Crypt32.dll

另请参阅

ALG_ID

CRYPT_ALGORITHM_IDENTIFIER

CRYPT_OID_INFO

CryptRegisterOIDInfo

CryptUnregisterOIDInfo

OID 支持函数