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


структура CRYPT_ENCRYPT_MESSAGE_PARA (wincrypt.h)

Структура CRYPT_ENCRYPT_MESSAGE_PARA содержит сведения, используемые для шифрования сообщений.

Синтаксис

typedef struct _CRYPT_ENCRYPT_MESSAGE_PARA {
  DWORD                      cbSize;
  DWORD                      dwMsgEncodingType;
  HCRYPTPROV_LEGACY          hCryptProv;
  CRYPT_ALGORITHM_IDENTIFIER ContentEncryptionAlgorithm;
  void                       *pvEncryptionAuxInfo;
  DWORD                      dwFlags;
  DWORD                      dwInnerContentType;
} CRYPT_ENCRYPT_MESSAGE_PARA, *PCRYPT_ENCRYPT_MESSAGE_PARA;

Члены

cbSize

Размер данной структуры (в байтах).

dwMsgEncodingType

Используемый тип кодирования. Всегда допустимо указывать типы кодирования сертификатов и сообщений, объединяя их с побитовой операцией ИЛИ , как показано в следующем примере:

X509_ASN_ENCODING | PKCS_7_ASN_ENCODING

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

  • X509_ASN_ENCODING
  • PKCS_7_ASN_ENCODING

hCryptProv

Этот элемент не используется и должен иметь значение NULL.

Windows Server 2003 и Windows XP: Дескриптор поставщика служб шифрования (CSP), который будет использоваться для шифрования. CSP, определяемый hCryptProv , используется для шифрования содержимого, шифрования ключа получателя и экспорта ключа получателя. Закрытый ключ не используется.

Если нет веской причины для передачи определенного поставщика шифрования в hCryptProv, передайте ноль, чтобы использовать поставщик RSA или DSS по умолчанию.

Тип данных этого элемента — HCRYPTPROV.

ContentEncryptionAlgorithm

Структура CRYPT_ALGORITHM_IDENTIFIER , содержащая идентификатор объекта (OID) используемого алгоритма шифрования. Поставщик служб конфигурации, указанный hCryptProv, должен поддерживать этот алгоритм шифрования.

Алгоритмы шифрования szOID_OIWSEC_desCBC (CALG_DES) и szOID_RSA_DES_EDE3_CBC (CALG_3DES) требуют, чтобы член Parameters этой структуры содержал закодированный восьмибайтовой вектор инициализации (IV). Если элемент cbData элемента Parameters равен нулю, то с помощью CryptGenRandom создается абстрактная синтаксическая нотация 1 (ASN.1) в кодировке OCTET STRING, содержащая iv. Дополнительные сведения о параметре KP_IV см. в разделе CryptSetKeyParam.

Алгоритмы шифрования szOID_NIST_AES128_CBC (BCRYPT_AES_ALGORITHM, 128 бит), szOID_NIST_AES192_CBC (BCRYPT_AES_ALGORITHM, 192 бит) и szOID_NIST_AES256_CBC (BCRYPT_AES_ALGORITHM, 256 бит) требуют, чтобы член Parameters этой структуры содержал закодированный шестнадцатибайтовый вектор инициализации (IV). Если элемент cbData элемента Parameters равен нулю, создается абстрактная синтаксическая нотация 1 (ASN.1) в кодировке OCTET STRING, содержащая iv.

Алгоритм szOID_RSA_RC2CBC (CALG_RC2) требует, чтобы элемент pbData элемента Parameters этой структуры был CRYPT_RC2_CBC_PARAMETERS структурой. Если элемент cbData элемента Parameters равен нулю, то в качестве элемента pbData создается структура CRYPT_RC2_CBC_PARAMETERS в кодировке ASN.1, содержащая iv. Этот созданный pbData использует dwVersion по умолчанию, соответствующий длине 40-разрядного ключа. Чтобы переопределить длину 40-разрядного ключа по умолчанию, можно задать параметр pvEncryptionAuxInfo , указывающий на CMSG_RC2_AUX_INFO структуру, содержащую длину бита ключа.

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

pvEncryptionAuxInfo

Указатель на структуру CMSG_RC2_AUX_INFO для шифрования RC2 или структуру CMSG_SP3_COMPATIBLE_AUX_INFO для шифрования, совместимого с пакетом обновления 3 (SP3). Для шифрования, отличного от rc2 или с пакетом обновления 3 (SP3), этот элемент должен иметь значение NULL.

Если элемент ContentEncryptionAlgorithm содержит szOID_RSA_RC4, он указывает на CMSG_RC4_AUX_INFO структуру, указывающую количество байтов соли , которые необходимо включить.

dwFlags

Обычно задается нулевое значение. Однако если закодированные выходные данные должны быть CMSG_ENVELOPED внутренним содержимым внешнего криптографического сообщения, например CMSG_SIGNED сообщения, необходимо задать CRYPT_MESSAGE_BARE_CONTENT_OUT_FLAG. Если он не задан, содержимое будет закодировано как внутренний тип контента CMSG_DATA.

CRYPT_MESSAGE_ENCAPSULATED_CONTENT_OUT_FLAG можно задать для инкапсуляции внутреннего содержимого , не являющегося данными, в коде OCTET STRING перед шифрованием.

CRYPT_MESSAGE_KEYID_RECIPIENT_FLAG можно настроить для идентификации получателей по идентификатору ключа, а не по издателю и серийному номеру.

dwInnerContentType

Обычно задается нулевое значение. Член dwInnerContentType должен быть задан для задания типов криптографических сообщений, если зашифрованные входные данные являются закодированными выходными данными другого криптографического сообщения, например CMSG_SIGNED.

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Верхняя часть wincrypt.h

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

CRYPT_ALGORITHM_IDENTIFIER

CryptEncryptMessage

CryptSignAndEncryptMessage