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


Функция EncryptMessage (Согласование)

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

Примечание.

EncryptMessage (Согласование) и DecryptMessage ( Согласование) можно вызывать одновременно из двух разных потоков в одном контексте интерфейса поставщика поддержки безопасности (SSPI), если один поток шифруется, а другой расшифровывается. Если шифрование нескольких потоков или несколько потоков расшифровываются, каждый поток должен получить уникальный контекст.

Синтаксис

SECURITY_STATUS SEC_Entry EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

Параметры

phContext [in] Дескриптор контекста безопасности , который будет использоваться для шифрования сообщения.

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

Этот параметр может быть следующим флагом.

Ценность Значение
SECQOP_WRAP_NO_ENCRYPT Создайте заголовок или трейлер, но не шифруйте сообщение.

Примечание.

KERB_WRAP_NO_ENCRYPT имеет то же значение и то же значение.

pMessage [in, out] Указатель на структуру SecBufferDesc . На входных данных структура ссылается на одну или несколько структур SecBuffer , которые могут быть типа SECBUFFER_DATA. Этот буфер содержит сообщение для шифрования. Сообщение шифруется на месте, перезаписав исходное содержимое структуры.

Функция не обрабатывает буферы с помощью атрибута SECBUFFER_READONLY.

Длина структуры SecBuffer , содержащей сообщение, не должна превышать cbMaximumMessage, которая получена из функции QueryContextAttributes (согласование) ( SECPKG_ATTR_STREAM_SIZES).

Приложения, не использующие ПРОТОКОЛ SSL, должны предоставлять SECBUFFER_PADDING типа SecBuffer .

MessageSeqNo [in] Порядковый номер, назначенный приложению транспорта для сообщения. Если приложение транспорта не поддерживает порядковые номера, этот параметр должен быть равен нулю.

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

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

Если функция завершается ошибкой, она возвращает один из следующих кодов ошибок.

Код возврата Описание
SEC_E_BUFFER_TOO_SMALL Буфер вывода слишком мал. Дополнительные сведения см. в разделе "Примечания".
SEC_E_CONTEXT_EXPIRED Приложение ссылается на контекст, который уже закрыт. Правильно написанное приложение не должно получать эту ошибку.
SEC_E_CRYPTO_SYSTEM_INVALID Шифр, выбранный для контекста безопасности, не поддерживается.
SEC_E_INSUFFICIENT_MEMORY Для выполнения запрошенного действия недостаточно памяти.
SEC_E_INVALID_HANDLE Недопустимый дескриптор контекста был указан в параметре phContext .
SEC_E_INVALID_TOKEN Буфер типа SECBUFFER_DATA не найден.
SEC_E_QOP_NOT_SUPPORTED Ни конфиденциальность, ни целостность не поддерживаются контекстом безопасности.

Замечания

Функция EncryptMessage (Согласование) шифрует сообщение на основе сообщения и ключа сеанса из контекста безопасности.

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

Примечание.

Эти буферы должны быть предоставлены в указанном порядке.

Тип буфера Описание
SECBUFFER_STREAM_HEADER Используется внутри системы. Не требуется инициализация.
SECBUFFER_DATA Содержит зашифрованное сообщение с открытым текстом .
SECBUFFER_STREAM_TRAILER Используется внутри системы. Не требуется инициализация.
SECBUFFER_EMPTY Используется внутри системы. Не требуется инициализация. Размер может быть равен нулю.

Для оптимальной производительности структуры pMessage должны быть выделены из непрерывной памяти.

Windows XP: Эта функция также называется SealMessage. Теперь приложения должны использовать только EncryptMessage (согласование).

Требования

Требование Ценность
Минимальный поддерживаемый клиент Windows XP [только классические приложения]
Минимальный поддерживаемый сервер Windows Server 2003 [только классические приложения]
Заголовок Sspi.h (include Security.h)
Библиотека Secur32.lib
DLL Secur32.dll

См. также