Функция EncryptMessage (Kerberos)
Функция EncryptMessage (Kerberos) шифрует сообщение для обеспечения конфиденциальности. EncryptMessage (Kerberos) позволяет приложению выбирать алгоритмы шифрования , поддерживаемые выбранным механизмом. Функция EncryptMessage (Kerberos) использует контекст безопасности , на который ссылается дескриптор контекста. Некоторые пакеты не имеют сообщений для шифрования или расшифровки, а предоставляют хэш целостности, который можно проверить.
Примечание
EncryptMessage (Kerberos) и DecryptMessage (Kerberos) можно вызывать одновременно из двух разных потоков в одном контексте поставщика поддержки безопасности (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 [вход, выход]
-
Указатель на структуру SecBufferDesc . Во входных данных структура ссылается на одну или несколько структур SecBuffer , которые могут иметь тип SECBUFFER_DATA. Этот буфер содержит зашифрованное сообщение. Сообщение шифруется на месте, перезаписывается исходное содержимое структуры.
Функция не обрабатывает буферы с помощью атрибута SECBUFFER_READONLY.
Длина структуры SecBuffer , содержащей сообщение, не должна быть больше cbMaximumMessage, полученной из функции QueryContextAttributes (Kerberos) (SECPKG_ATTR_STREAM_SIZES).
Приложения, которые не используют SSL, должны предоставлять SecBuffer типа SECBUFFER_PADDING.
-
MessageSeqNo [in]
-
Порядковый номер, назначенный транспортному приложению сообщению. Если транспортное приложение не поддерживает порядковые номера, этот параметр должен быть равен нулю.
Возвращаемое значение
Если функция выполняется успешно, функция возвращает SEC_E_OK.
Если функция завершается сбоем, она возвращает один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Выходной буфер слишком мал. Дополнительные сведения см. в подразделе "Примечания". |
|
Приложение ссылается на контекст, который уже был закрыт. Правильно написанное приложение не должно получать эту ошибку. |
|
Шифр, выбранный для контекста безопасности, не поддерживается. |
|
Недостаточно памяти для выполнения запрошенного действия. |
|
Недопустимый дескриптор контекста был указан в параметре phContext . |
|
Буфер типа SECBUFFER_DATA не найден. |
|
Контекст безопасности не поддерживает ни конфиденциальность, ни целостность. |
Комментарии
Функция EncryptMessage (Kerberos) шифрует сообщение на основе сообщения и ключа сеанса из контекста безопасности.
Если транспортное приложение создало контекст безопасности для поддержки обнаружения последовательности, а вызывающий объект предоставляет порядковый номер, функция включает эти сведения в зашифрованное сообщение. Включение этой информации защищает от воспроизведения, вставки и подавления сообщений. Пакет безопасности включает порядковый номер, передаваемый из транспортного приложения.
Примечание
Эти буферы должны быть предоставлены в указанном порядке.
Тип буфера | Описание |
---|---|
SECBUFFER_STREAM_HEADER< | Для внутреннего использования. Инициализация не требуется. |
SECBUFFER_DATA | Содержит зашифрованное сообщение в виде открытого текста . |
SECBUFFER_STREAM_TRAILER | Для внутреннего использования. Инициализация не требуется. |
SECBUFFER_EMPTY | Для внутреннего использования. Инициализация не требуется. Размер может быть равен нулю. |
Для оптимальной производительности структуры pMessage должны быть выделены из непрерывной памяти.
Windows XP: Эта функция также известна как SealMessage. Теперь приложения должны использовать только EncryptMessage (Kerberos).
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Заголовок | Sspi.h (включая Security.h) |
Библиотека | Secur32.lib |
DLL | Secur32.dll |