Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Функция EncryptMessage (General) шифрует сообщение для предоставления конфиденциальности. EncryptMessage (Общие) позволяет приложению выбирать один из алгоритмов шифрования , поддерживаемых выбранным механизмом. Функция EncryptMessage (General) использует контекст безопасности , на который ссылается дескриптор контекста. Некоторые пакеты не имеют сообщений, которые необходимо шифровать или расшифровывать, но предоставляют хэш целостности, который можно проверить.
При использовании поставщика поддержки безопасности дайджеста (SSP) эта функция доступна только в качестве механизма SASL.
При использовании Schannel SSP эта функция шифрует сообщения с помощью ключа сеанса , согласованного с удаленной стороной, которая получит сообщение. Алгоритм шифрования определяется используемым [набором шифров ](шифр-suites-in-schannel.md).
Примечание.
EncryptMessage (General) и DecryptMessage (General) можно вызывать одновременно из двух разных потоков в одном контексте интерфейса поставщика поддержки безопасности (SSPI), если один поток шифруется, а другой расшифровывается. Если шифрование нескольких потоков или несколько потоков расшифровываются, каждый поток должен получить уникальный контекст.
Сведения об использовании этой функции с определенным поставщиком служб см. в следующих разделах.
| Тема | Описание |
|---|---|
| EncryptMessage (Дайджест) | Шифрует сообщение для предоставления конфиденциальности с помощью дайджеста. |
| EncryptMessage (Kerberos) | Шифрует сообщение для предоставления конфиденциальности с помощью Kerberos. |
| EncryptMessage (согласование) | Шифрует сообщение для предоставления конфиденциальности с помощью переговоров. |
| EncryptMessage (NTLM) | Шифрует сообщение для обеспечения конфиденциальности с помощью NTLM. |
| EncryptMessage (Schannel) | Шифрует сообщение для предоставления конфиденциальности с помощью Schannel. |
Синтаксис
SECURITY_STATUS SEC_Entry EncryptMessage(
_In_ PCtxtHandle phContext,
_In_ ULONG fQOP,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo
);
Параметры
phContext [in]
Дескриптор контекста безопасности , который будет использоваться для шифрования сообщения.
fQOP [in]
Флаги для конкретного пакета, указывающие качество защиты. Пакет безопасности может использовать этот параметр для включения выбора алгоритмов шифрования.
При использовании SSP дайджеста этот параметр должен иметь значение нулю.
Этот параметр может быть одним из следующих флагов.
| Ценность | Значение |
|---|---|
|
SECQOP_WRAP_NO_ENCRYPT |
Создайте заголовок или трейлер, но не шифруйте сообщение. Заметка: KERB_WRAP_NO_ENCRYPT имеет то же значение и то же значение. |
|
Отправьте сообщение об оповещении Schannel. В этом случае параметр pMessage должен содержать стандартный двухбайтовый код события SSL/TLS. Это значение поддерживается только поставщиком Schannel SSP. |
pMessage [in, out]
Указатель на структуру SecBufferDesc . По входным данным структура ссылается на одну или несколько структур SecBuffer . Одно из них может быть типом SECBUFFER_DATA. Этот буфер содержит сообщение для шифрования. Сообщение шифруется на месте, перезаписав исходное содержимое структуры.
Функция не обрабатывает буферы с помощью атрибута SECBUFFER_READONLY.
Длина структуры SecBuffer , содержащей сообщение, не должна превышать cbMaximumMessage, полученной из функции QueryContextAttributes (general) ( SECPKG_ATTR_STREAM_SIZES).
При использовании SSP дайджеста необходимо иметь второй буфер типа SECBUFFER_PADDING или SEC_BUFFER_DATA для хранения сведений о подписи . Чтобы получить размер выходного буфера, вызовите функцию QueryContextAttributes (General) и укажите SECPKG_ATTR_SIZES. Функция вернет структуру SecPkgContext_Sizes . Размер выходного буфера — это сумма значений в элементах cbMaxSignature и cbBlockSize .
Приложения, не использующие ПРОТОКОЛ SSL, должны предоставлять SECBUFFER_PADDING типа SecBuffer .
MessageSeqNo [in]
Порядковый номер, назначенный приложению транспорта для сообщения. Если приложение транспорта не поддерживает порядковые номера, этот параметр должен быть равен нулю.
При использовании SSP дайджеста этот параметр должен иметь значение нулю. Поставщик служб дайджеста управляет нумеровой последовательностью внутри системы.
При использовании Schannel SSP этот параметр должен иметь значение нулю. Schannel SSP не использует порядковые номера.
Возвращаемое значение
Если функция выполнена успешно, функция возвращает 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 (General) шифрует сообщение на основе сообщения и ключа сеанса из контекста безопасности.
Если приложение транспорта создало контекст безопасности для поддержки обнаружения последовательности и вызывающий объект предоставляет порядковый номер, функция содержит эти сведения с зашифрованным сообщением. В том числе эта информация защищает от воспроизведения, вставки и подавления сообщений. Пакет безопасности включает порядковый номер, передаваемый из транспортного приложения.
При использовании службы "Дайджест SSP" получите размер выходного буфера, вызвав функцию QueryContextAttributes (General) и указав SECPKG_ATTR_SIZES. Функция вернет структуру SecPkgContext_Sizes . Размер выходного буфера — это сумма значений в элементах cbMaxSignature и cbBlockSize .
При использовании с Schannel SSP параметр pMessage должен содержать структуру SecBufferDesc со следующими буферами.
Примечание.
Эти буферы должны быть предоставлены в указанном порядке.
| Тип буфера | Описание |
|---|---|
| SECBUFFER_STREAM_HEADER | Используется внутри системы. Не требуется инициализация. |
| SECBUFFER_DATA | Содержит зашифрованное сообщение с открытым текстом . |
| SECBUFFER_STREAM_TRAILER | Используется внутри системы. Не требуется инициализация. |
| SECBUFFER_EMPTY | Используется внутри системы. Не требуется инициализация. Размер может быть равен нулю. |
При использовании Schannel SSP определите максимальный размер каждого буфера, вызвав функцию QueryContextAttributes (General) и указав атрибут SECPKG_ATTR_STREAM_SIZES. Эта функция возвращает SecPkgContext_StreamSizes структуру, элементы которой содержат максимальные размеры для буферов заголовка (cbHeader ), сообщения (член cbMaximumMessage ) и трейлера (член cbTrailer ).
Для оптимальной производительности структуры pMessage должны быть выделены из непрерывной памяти.
Windows XP/2000: Эта функция также называется SealMessage. Теперь приложения должны использовать только EncryptMessage (Общие).
Требования
| Требование | Ценность |
|---|---|
| Минимальный поддерживаемый клиент | Windows XP [только классические приложения] |
| Минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
| Заголовок |
|
| Библиотека |
|
| DLL |
|