Функция EncryptMessage (sspi.h)
Функция EncryptMessage (Digest) шифрует сообщение для обеспечения конфиденциальности. EncryptMessage (Digest) позволяет приложению выбирать алгоритмы шифрования , поддерживаемые выбранным механизмом. Функция EncryptMessage (Digest) использует контекст безопасности , на который ссылается дескриптор контекста. Некоторые пакеты не имеют сообщений для шифрования или расшифровки, а предоставляют хэш целостности, который можно проверить.
Эта функция доступна только в виде механизма SASL.
Синтаксис
SECURITY_STATUS SEC_ENTRY EncryptMessage(
[in] PCtxtHandle phContext,
[in] unsigned long fQOP,
[in, out] PSecBufferDesc pMessage,
[in] unsigned long MessageSeqNo
);
Параметры
[in] phContext
Дескриптор контекста безопасности, используемый для шифрования сообщения.
[in] fQOP
Флаги, относящиеся к конкретному пакету, которые указывают на качество защиты. Пакет безопасности может использовать этот параметр для включения выбора алгоритмов шифрования.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение.
[in, out] pMessage
Указатель на структуру SecBufferDesc . Во входных данных структура ссылается на одну или несколько структур SecBuffer , которые могут иметь тип SECBUFFER_DATA. Этот буфер содержит зашифрованное сообщение. Сообщение шифруется на месте, перезаписывается исходное содержимое структуры.
Функция не обрабатывает буферы с помощью атрибута SECBUFFER_READONLY.
Длина структуры SecBuffer , содержащей сообщение, не должна превышать cbMaximumMessage, полученную из функции QueryContextAttributes (Digest) (SECPKG_ATTR_STREAM_SIZES).
При использовании дайджест-поставщика общих служб для хранения сведений о сигнатуре должен быть второй буфер типа SECBUFFER_PADDING или SEC_BUFFER_DATA. Чтобы получить размер выходного буфера, вызовите функцию QueryContextAttributes (Digest) и укажите SECPKG_ATTR_SIZES. Функция вернет структуру SecPkgContext_Sizes . Размер выходного буфера — это сумма значений в членах cbMaxSignature и cbBlockSize .
Приложения, которые не используют SSL, должны предоставлять SecBuffer типа SECBUFFER_PADDING.
[in] MessageSeqNo
Порядковый номер, назначенный транспортному приложению сообщению. Если транспортное приложение не поддерживает порядковые номера, этот параметр должен быть равен нулю.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение. Дайджест SSP управляет порядковой нумеровой службой внутри системы.
Возвращаемое значение
Если функция выполняется успешно, функция возвращает SEC_E_OK.
Если функция завершается сбоем, она возвращает один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Выходной буфер слишком мал. Дополнительные сведения см. в подразделе "Примечания". |
|
Приложение ссылается на контекст, который уже был закрыт. Правильно написанное приложение не должно получать эту ошибку. |
|
Шифр, выбранный для контекста безопасности, не поддерживается. |
|
Недостаточно памяти для выполнения запрошенного действия. |
|
Недопустимый дескриптор контекста был указан в параметре phContext . |
|
Буфер типа SECBUFFER_DATA не найден. |
|
Контекст безопасности не поддерживает ни конфиденциальность, ни целостность. |
Комментарии
Функция EncryptMessage (Digest) шифрует сообщение на основе сообщения и ключа сеанса из контекста безопасности.
Если транспортное приложение создало контекст безопасности для поддержки обнаружения последовательности, а вызывающий объект предоставляет порядковый номер, функция включает эти сведения в зашифрованное сообщение. Включение этой информации защищает от воспроизведения, вставки и подавления сообщений. Пакет безопасности включает порядковый номер, передаваемый из транспортного приложения.
При использовании дайджест-поставщика общих служб получите размер выходного буфера, вызвав функцию QueryContextAttributes (Digest) и указав SECPKG_ATTR_SIZES. Функция вернет структуру SecPkgContext_Sizes . Размер выходного буфера — это сумма значений в членах cbMaxSignature и cbBlockSize .
Тип буфера | Описание |
---|---|
SECBUFFER_STREAM_HEADER | Для внутреннего использования. Инициализация не требуется. |
SECBUFFER_DATA | Содержит зашифрованное сообщение в виде открытого текста . |
SECBUFFER_STREAM_TRAILER | Для внутреннего использования. Инициализация не требуется. |
SECBUFFER_EMPTY | Для внутреннего использования. Инициализация не требуется. Размер может быть равен нулю. |
Для оптимальной производительности структуры pMessage должны быть выделены из непрерывной памяти.
Windows XP: Эта функция также известна как SealMessage. Теперь приложения должны использовать только EncryptMessage (Digest).
Требования
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | sspi.h (включая Security.h) |
Библиотека | Secur32.lib |
DLL | Secur32.dll |
См. также раздел
AcceptSecurityContext (дайджест)
InitializeSecurityContext (digest)