Функция EncryptMessage (Digest)
Функция EncryptMessage (Digest) шифрует сообщение для обеспечения конфиденциальности. EncryptMessage (Дайджест) позволяет приложению выбирать алгоритмы шифрования , поддерживаемые выбранным механизмом. Функция EncryptMessage (Digest) использует контекст безопасности , на который ссылается дескриптор контекста. Некоторые пакеты не имеют сообщений для шифрования или расшифровки, а предоставляют хэш целостности, который можно проверить.
Эта функция доступна только в виде механизма SASL.
Примечание
EncryptMessage (Digest) и DecryptMessage (Digest) можно вызывать одновременно из двух разных потоков в одном контексте интерфейса поставщика поддержки безопасности (SSPI), если один поток шифруется, а другой расшифровывается. Если шифруется несколько потоков или расшифровывается несколько потоков, каждый поток должен получить уникальный контекст.
Синтаксис
SECURITY_STATUS SEC_ENTRY EncryptMessage(
PCtxtHandle phContext,
unsigned long fQOP,
PSecBufferDesc pMessage,
unsigned long MessageSeqNo
);
Параметры
-
phContext [in]
-
Дескриптор контекста безопасности , который будет использоваться для шифрования сообщения.
-
fQOP [in]
-
Флаги, относящиеся к конкретному пакету, которые указывают на качество защиты. Пакет безопасности может использовать этот параметр для включения выбора алгоритмов шифрования.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение.
-
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.
-
MessageSeqNo [in]
-
Порядковый номер, назначенный транспортному приложению сообщению. Если транспортное приложение не поддерживает порядковые номера, этот параметр должен быть равен нулю.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение. Поставщик дайджест-служб 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 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|
См. также раздел