структура 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 структуру, содержащую длину бита ключа.
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 |