Поделиться через


Функция EncryptMessage (Digest)

Функция 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.

Если функция завершается ошибкой, она возвращает один из следующих кодов ошибок.

Код возврата Описание
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 (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 [только классические приложения]
Заголовок
Sspi.h (include Security.h)
Библиотека
Secur32.lib
DLL
Secur32.dll

См. также

Функции SSPI

AcceptSecurityContext (Дайджест)

РасшифровкаMessage (дайджест)

InitializeSecurityContext (Digest)

QueryContextAttributes (Digest)

SecBuffer

SecBufferDesc