Поделиться через


Функция CryptFindOIDInfo (wincrypt.h)

Функция CryptFindOIDInfo извлекает первую предопределенную или зарегистрированную структуру CRYPT_OID_INFO , соответствующую указанному типу ключа и ключу. Поиск может быть ограничен идентификаторами объектов (OID) в указанной группе OID.

Используйте CryptEnumOIDInfo для вывода списка всех или выбранных подмножеств CRYPT_OID_INFO структур. Новые структуры CRYPT_OID_INFO можно зарегистрировать с помощью CryptRegisterOIDInfo. Зарегистрированные пользователем идентификаторы OID можно удалить из списка зарегистрированных идентификаторов OID с помощью CryptUnregisterOIDInfo.

Новые идентификаторы OID можно поместить в список зарегистрированных идентификаторов OID до или после предопределенных записей. Так как CryptFindOIDInfo возвращает первый ключ в списке, соответствующий условиям поиска, новый зарегистрированный идентификатор объекта, размещенный перед предопределенной записью OID с тем же ключом, переопределяет предопределенную запись.

Синтаксис

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

Параметры

[in] dwKeyType

Указывает тип ключа, используемый при поиске сведений об идентификаторе.

Этот параметр может иметь один из следующих типов ключей.

CRYPT_OID_INFO_OID_KEY

pvKey — это адрес строки ANSI, завершаемой null, которая содержит строку OID для поиска.

CRYPT_OID_INFO_NAME_KEY

pvKey — это адрес строки Юникода, завершаемой null, которая содержит искать имя.

CRYPT_OID_INFO_ALGID_KEY

pvKey — это адрес переменной ALG_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 — это адрес строки Юникода, завершаемой null, которая содержит идентификатор алгоритма CNG для поиска. Это может быть один из предопределенных идентификаторов алгоритма CNG или другой зарегистрированный идентификатор алгоритма.

Windows Server 2003 R2 Windows Server 2003 : Этот тип ключа не поддерживается.

CRYPT_OID_INFO_CNG_SIGN_KEY

pvKey — это адрес массива из двух указателей строки Юникода, заканчивающихся nullом, где первая строка содержит идентификатор хэш-алгоритма CNG, а вторая строка содержит идентификатор алгоритма CNG открытого ключа. Они могут быть из предопределенных идентификаторов алгоритма CNG или другого зарегистрированного идентификатора алгоритма.

Windows Server 2003 R2 Windows Server 2003 : Этот тип ключа не поддерживается.

При необходимости можно указать следующие типы ключей в параметре 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

Идентификатор группы, используемый при поиске сведений об идентификаторе. Установка для этого параметра значения 0 выполняет поиск во всех группах в соответствии с параметром dwKeyType . В противном случае выполняется поиск только указанного dwGroupId .

Сведения о коде, который содержит сведения об OID по идентификатору группы, см. в разделе CryptEnumOIDInfo.

При необходимости следующий флаг можно указать в параметре dwGroupId с помощью оператора логического ИЛИ (|).

Значение Значение
CRYPT_OID_DISABLE_SEARCH_DS_FLAG
Отключает поиск на сервере каталогов.
 

Битовую длину, смещаемую влево на 16 бит, можно указать в параметре dwGroupId с помощью логического оператора OR (|). Дополнительные сведения см. в подразделе "Примечания".

Возвращаемое значение

Возвращает указатель на константную структуру типа CRYPT_OID_INFO. Возвращаемый указатель не должен быть освобожден. Если указанный ключ и группа не найдены, возвращается значение NULL .

Комментарии

Функция CryptFindOIDInfo выполняет поиск в Active Directory для получения понятных имен OID при следующих условиях:

  • Тип ключа в параметре dwKeyType имеет значение CRYPT_OID_INFO_OID_KEY или CRYPT_OID_INFO_NAME_KEY.
  • Идентификатор группы не указан в параметре dwGroupId , или GroupID ссылается на идентификаторы EKU, идентификаторы политик или идентификаторы шаблонов.
Получение понятного имени в сети можно отключить, вызвав функцию с флагом CRYPT_OID_DISABLE_SEARCH_DS_FLAG .

Битовую длину, смещаемую влево на 16 бит, можно указать в параметре dwGroupId с помощью логического оператора OR (|). Это применимо только к CRYPT_ENCRYPT_ALG_OID_GROUP_ID записям группы, длина бита которых указана в элементе ExtraInfoструктуры CRYPT_OID_INFO . В настоящее время это имеется только в алгоритмах шифрования AES. Для выполнения смены можно использовать константную CRYPT_OID_INFO_OID_GROUP_BIT_LEN_SHIFT . Например, чтобы найти сведения об OID для BCRYPT_AES_ALGORITHM с битовой длиной 192, вызовите 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
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

См. также раздел

ALG_ID

CRYPT_ALGORITHM_IDENTIFIER

CRYPT_OID_INFO

CryptRegisterOIDInfo

CryptUnregisterOIDInfo

Функции поддержки OID