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


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

Важные этот API не рекомендуется. Новое и существующее программное обеспечение должно начинаться с API следующего поколения шифрования. Корпорация Майкрософт может удалить этот API в будущих выпусках.
 
Функция CryptGetKeyParam извлекает данные, управляющие операциями ключа. Если используется поставщиком служб шифрования Майкрософт, базовый материал симметричного ключа недоступен для этой или любой другой функции.

Синтаксис

BOOL CryptGetKeyParam(
  [in]      HCRYPTKEY hKey,
  [in]      DWORD     dwParam,
  [out]     BYTE      *pbData,
  [in, out] DWORD     *pdwDataLen,
  [in]      DWORD     dwFlags
);

Параметры

[in] hKey

Дескриптор запрашиваемого ключа.

[in] dwParam

Указывает тип выполняемого запроса.

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

Ценность Значение
KP_ALGID
Получение алгоритма ключа. Параметр pbData — это указатель на значение ALG_ID, которое получает идентификатор алгоритма, указанного при создании ключа.

Если AT_KEYEXCHANGE или AT_SIGNATURE указан для параметра Algid функции CryptGenKey, идентификаторы алгоритма, используемые для создания ключа, зависят от используемого поставщика. Дополнительные сведения см. в ALG_ID.

KP_BLOCKLEN
Если ключ сеанса указан параметром hKey, получите длину блока шифра ключа. Параметр pbData — это указатель на значение DWORD, которое получает длину блока в битах. Для шифров потоковэто значение всегда равно нулю.

Если пары открытых и закрытых ключей указывается hKey, извлеките степень детализации шифрования пары ключей. Параметр pbData — это указатель на значение DWORD, которое получает степень детализации шифрования в битах. Например, поставщик шифрования Базы Майкрософт создает 512-разрядные пары ключей RSA, поэтому для этих ключей возвращается значение 512. Если алгоритм открытого ключа не поддерживает шифрование, то полученное значение не определено.

KP_CERTIFICATE
pbData — это адрес буфера, который получает сертификат X.509, который был закодирован с помощью различающихся правил кодирования (DER). открытый ключ в сертификата должен соответствовать соответствующему сигнатуре или ключу exchange.
KP_GET_USE_COUNT
Это значение не используется.
KP_KEYLEN
Получите фактическую длину ключа. Параметр pbData — это указатель на значение DWORD, которое получает длину ключа в битах. KP_KEYLEN можно использовать для получения длины любого типа ключа. Поставщики служб шифрования microsoft (CSPs) возвращают длину ключа в 64 бита для CALG_DES, 128 бит для CALG_3DES_112и 192 битов для CALG_3DES. Эти длины отличаются от длины, возвращаемой при перечислении алгоритмов с dwParam значением функции CryptGetProvParam значение PP_ENUMALGS. Длина, возвращаемая этим вызовом, — это фактический размер ключа, включая биты четности, включенные в ключ.

Поставщики СЛУЖБ Майкрософт, поддерживающие CALG_CYLINK_MEKALG_ID возвращают 64 бита для этого алгоритма. CALG_CYLINK_MEK является 40-разрядным ключом, но имеет четность и ноль битов ключей, чтобы сделать длину ключа 64 битами.

KP_SALT
Получите значение соли ключа. Параметр pbData — это указатель на массив BYTE, который получает значение соли в малоконечной форме. Размер значения соли зависит от используемого CSP и алгоритма. Значения соли не применяются к парам открытых и закрытых ключей .
KP_PERMISSIONS
Получение разрешений ключа. Параметр pbData — это указатель на значение DWORD, которое получает флаги разрешений для ключа.

В настоящее время определены следующие идентификаторы разрешений. Разрешения ключа могут быть равны нулю или сочетанию одного или нескольких из следующих значений.

CRYPT_ARCHIVE
Разрешить экспорт в течение времени существования дескриптора ключа. Это разрешение можно задать только в том случае, если оно уже задано в поле внутренних разрешений ключа. Попытки очистить это разрешение игнорируются.
CRYPT_DECRYPT
Разрешить расшифровку.
CRYPT_ENCRYPT
Разрешить шифрование.
CRYPT_EXPORT
Разрешить экспорт ключа.
CRYPT_EXPORT_KEY
Разрешить использование ключа для экспорта ключей.
CRYPT_IMPORT_KEY
Разрешить использовать ключ для импорта ключей.
CRYPT_MAC
Разрешить коды проверки подлинности сообщений (MACs) использовать с ключом.
CRYPT_READ
Разрешить чтение значений.
CRYPT_WRITE
Разрешить задавать значения.
 

Если ключ (DSS) цифровой подписи указывается параметром hKey, значение dwParam также может быть задано одним из следующих значений.

Ценность Значение
KP_P
Извлеките основной номер P модуля ключа DSS. Параметр pbData — это указатель на буфер, который получает значение в маленькой форме. Параметр pdwDataLen содержит размер буфера в байтах.
KP_Q
Извлеките основной номер модуля Q ключа DSS. Параметр pbData — это указатель на буфер, который получает значение в маленькой форме. Параметр pdwDataLen содержит размер буфера в байтах.
KP_G
Получите генератор G ключа DSS. Параметр pbData — это указатель на буфер, который получает значение в маленькой форме. Параметр pdwDataLen содержит размер буфера в байтах.
 

Если ключа сеанса блоказадается параметром hKey, значение dwParam также может быть задано одним из следующих значений.

Ценность Значение
KP_EFFECTIVE_KEYLEN
Получение эффективной длины ключа RC2. Параметр pbData — это указатель на значение DWORD, которое получает эффективную длину ключа.
KP_IV
Получение вектора инициализации ключа. Параметр pbData — это указатель на массив BYTE, который получает вектор инициализации. Размер этого массива — это размер блока в байтах. Например, если длина блока составляет 64 бита, вектор инициализации состоит из 8 байт.
KP_PADDING
Получите режим заполнения. Параметр pbData — это указатель на значение DWORD, которое получает числовое идентификатор, определяющее метод , используемыйшифром . Это может быть одно из следующих значений.
PKCS5_PADDING
Задает метод заполнения PKCS 5 (с 6.2).
RANDOM_PADDING
При заполнении используются случайные числа. Этот метод заполнения не поддерживается предоставленными корпорацией Майкрософт поставщиком поставщиков служб.
ZERO_PADDING
Заполнение использует нули. Этот метод заполнения не поддерживается предоставленными корпорацией Майкрософт поставщиком поставщиков служб.
KP_MODE
Получение режима шифра . Параметр pbData — это указатель на значение DWORD, которое получает идентификатор режима шифра. Дополнительные сведения о режимах шифров см. в шифрования и расшифровки.

В настоящее время определены следующие идентификаторы режима шифра.

CRYPT_MODE_CBC
Режим шифра цепочке блоков шифров.
CRYPT_MODE_CFB
Режим шифра обратной связи шифров (CFB). Microsoft CSPs в настоящее время поддерживает только 8-разрядную обратную связь в режиме обратной связи с шифрами.
CRYPT_MODE_ECB
Режим шифра — это электронные кодовые книги.
CRYPT_MODE_OFB
Режим шифра — это выходных отзывов (OFB). Microsoft CSPs в настоящее время не поддерживает режим вывода обратной связи.
CRYPT_MODE_CTS
Режим шифра режим кражи шифров.
KP_MODE_BITS
Извлеките количество битов для обратного канала. Параметр pbData — это указатель на значение DWORD, которое получает количество битов, обрабатываемых в цикле при использовании режимов шифров OFB или CFB.
 

Если ключ алгоритма Diffie-Hellman или алгоритма цифровой подписи (DSA) задаетсяhKey , значение dwParam также может быть задано следующим значением.

Ценность Значение
KP_VERIFY_PARAMS
Проверяет параметры алгоритма Diffie-Hellman или ключа DSA. Параметр pbData не используется, а значение, указываемое pdwDataLen получает ноль.

Эта функция возвращает ненулевое значение, если ключевые параметры допустимы или ноль в противном случае.

KP_KEYVAL
Это значение не используется.

Windows Vista, Windows Server 2003 и Windows XP: получить значение секретного соглашения из импортированного алгоритма Diffie-Hellman ключа типа CALG_AGREEDKEY_ANY. Параметр pbData — это адрес буфера, который получает значение соглашения секрета в маленьком формате. Этот буфер должен иметь ту же длину, что и ключ. Параметр dwFlags должен иметь значение 0xF42A19B6. Это свойство можно получить только потоком, запущенным в локальной системной учетной записи. Это свойство доступно для использования в операционных системах, перечисленных выше. Он может быть изменен или недоступен в последующих версиях.

 

Если сертификат указан hKey, значение dwParam также может быть задано следующим значением.

Ценность Значение
KP_CERTIFICATE
Буфер, содержащий сертификат X.509 в кодировке DER. Параметр pbData не используется, а значение, указываемое pdwDataLen получает ноль.

Эта функция возвращает ненулевое значение, если ключевые параметры допустимы или ноль в противном случае.

[out] pbData

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

Если размер этого буфера не известен, требуемый размер можно получить во время выполнения путем передачи NULL для этого параметра и задания значения, указываемого на pdwDataLen равным нулю. Эта функция поместит необходимый размер буфера в байтах в значение, на которое указывает pdwDataLen. Дополнительные сведения см. в разделе получение данных неизвестной длины.

[in, out] pdwDataLen

Указатель на значение DWORD, содержащее размер буфера в байтах, на который указывает параметр pbData. При возврате функции значение DWORD содержит количество байтов, хранящихся в буфере.

Примечание При обработке данных, возвращаемых в буфере, приложения должны использовать фактический размер возвращаемых данных. Фактический размер может быть немного меньше размера буфера, указанного во входных данных. При входных данных размеры буфера иногда указываются достаточно большими, чтобы обеспечить максимально возможные выходные данные в буфере. В выходных данных переменная, на которую указывает этот параметр, обновляется, чтобы отразить фактический размер данных, скопированных в буфер.
 

[in] dwFlags

Этот параметр зарезервирован для дальнейшего использования и должен иметь значение нулю.

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

Если функция выполнена успешно, функция возвращает ненулевое значение.

Если функция завершается ошибкой, она возвращает ноль. Для получения расширенных сведений об ошибке вызовите GetLastError.

Коды ошибок, предуставленные NTE, создаются конкретным используемым поставщиком служб CSP. Ниже приведены некоторые возможные коды ошибок.

Возвращаемый код Описание
ERROR_INVALID_HANDLE
Один из параметров задает недопустимый дескриптор.
ERROR_INVALID_PARAMETER
Один из параметров содержит недопустимое значение. Чаще всего это недопустимый указатель.
ERROR_MORE_DATA
Если буфер, указанный параметром pbData, недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах, на которую указывает pdwDataLen.
NTE_BAD_FLAGS
Параметр dwFlags ненулево.
NTE_BAD_KEY или NTE_NO_KEY
Недопустимый ключ, указанный параметром hKey.
NTE_BAD_TYPE
Параметр dwParam указывает неизвестный номер значения.
NTE_BAD_UID
Контекст CSP , указанный при создании ключа.

Требования

Требование Ценность
минимальные поддерживаемые клиентские Windows XP [только классические приложения]
минимальный поддерживаемый сервер Windows Server 2003 [только классические приложения]
целевая платформа Виндоус
заголовка wincrypt.h
библиотеки Advapi32.lib
DLL Advapi32.dll

См. также

CryptSetKeyParam

функции создания ключей и функций Exchange