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