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


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

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

Синтаксис

BOOL CryptSignAndEncryptMessage(
  [in]      PCRYPT_SIGN_MESSAGE_PARA    pSignPara,
  [in]      PCRYPT_ENCRYPT_MESSAGE_PARA pEncryptPara,
  [in]      DWORD                       cRecipientCert,
  [in]      PCCERT_CONTEXT []           rgpRecipientCert,
  [in]      const BYTE                  *pbToBeSignedAndEncrypted,
  [in]      DWORD                       cbToBeSignedAndEncrypted,
  [out]     BYTE                        *pbSignedAndEncryptedBlob,
  [in, out] DWORD                       *pcbSignedAndEncryptedBlob
);

Параметры

[in] pSignPara

Указатель на структуру CRYPT_SIGN_MESSAGE_PARA , содержащую параметры сигнатуры.

[in] pEncryptPara

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

[in] cRecipientCert

Количество элементов массива в rgpRecipientCert.

[in] rgpRecipientCert

Массив указателей на структуры CERT_CONTEXT . Каждая структура является сертификатом предполагаемых получателей сообщения.

[in] pbToBeSignedAndEncrypted

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

[in] cbToBeSignedAndEncrypted

Размер буфера pbToBeSignedAndEncrypted (в байтах).

[out] pbSignedAndEncryptedBlob

Указатель на буфер для получения зашифрованного и закодированного сообщения.

Этот параметр может иметь значение NULL , чтобы задать размер этих сведений для целей выделения памяти. Дополнительные сведения см. в разделе Извлечение данных неизвестной длины.

[in, out] pcbSignedAndEncryptedBlob

Указатель на DWORD , указывающий размер (в байтах) буфера, на который указывает pbSignedAndEncryptedBlob. При возврате функции эта переменная содержит размер подписанного и зашифрованного сообщения в байтах, скопированного в файл *pbSignedAndEncryptedBlob.

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

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

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

Если функция завершается сбоем, возвращаемое значение равно нулю (FALSE).

Чтобы получить дополнительные сведения об ошибке, вызовите Метод GetLastError.

Ниже приведен код ошибки, наиболее часто возвращаемый функцией GetLastError .

Код возврата Описание
ERROR_MORE_DATA
Если буфер, заданный параметром pbSignedAndEncryptedBlob , недостаточно велик для хранения возвращаемых данных, функция задает код ERROR_MORE_DATA и сохраняет требуемый размер буфера в байтах в переменной, на которую указывает pcbSignedAndEncryptedBlob.
 
Примечание Ошибки из вызываемых функций CryptSignMessage и CryptEncryptMessage могут распространяться на эту функцию.
 

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Целевая платформа Windows
Header wincrypt.h
Библиотека Crypt32.lib
DLL Crypt32.dll

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

CryptDecryptAndVerifyMessageSignature

CryptSignMessage

Упрощенные функции сообщений