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


Функция DecryptMessage (Digest)

Функция DecryptMessage (Digest) расшифровывает сообщение. Некоторые пакеты не шифруют и не расшифровывают сообщения, а выполняют и проверка хэш целостности.

Поставщик поддержки дайджест-безопасности (SSP) обеспечивает конфиденциальность шифрования и расшифровки для сообщений, обмениваемых между клиентом и сервером только в качестве механизма SASL.

Примечание

EncryptMessage (Digest) и DecryptMessage (Digest) можно вызывать одновременно из двух разных потоков в одном контексте поставщика поддержки безопасности (SSPI), если один поток шифруется, а другой расшифровывается. Если шифруется несколько потоков или расшифровывается несколько потоков, каждый поток должен получить уникальный контекст.

Синтаксис

SECURITY_STATUS SEC_ENTRY DecryptMessage(
  PCtxtHandle    phContext,
  PSecBufferDesc pMessage,
  unsigned long  MessageSeqNo,
  unsigned long  *pfQOP
);

Параметры

phContext [in]

Дескриптор контекста безопасности , используемый для расшифровки сообщения.

pMessage [вход, выход]

Указатель на структуру SecBufferDesc . Во входных данных структура ссылается на одну или несколько структур SecBuffer . По крайней мере один из них должен иметь тип SECBUFFER_DATA. Этот буфер содержит зашифрованное сообщение. Зашифрованное сообщение расшифровывается на месте, перезаписав исходное содержимое буфера.

При использовании дайджест-поставщика общих служб во входных данных структура ссылается на одну или несколько структур SecBuffer . Один из них должен иметь тип SECBUFFER_DATA или SECBUFFER_STREAM и содержать зашифрованное сообщение.

MessageSeqNo [in]

Порядковый номер, ожидаемый транспортным приложением, если таковой есть. Если транспортное приложение не поддерживает порядковые номера, этот параметр должен иметь нулевое значение.

При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение. Дайджест SSP управляет порядковой нумеровой службой внутри системы.

pfQOP [out]

Указатель на переменную типа ULONG , которая получает флаги, относящиеся к пакету, которые указывают на качество защиты.

Этот параметр может быть одним из следующих флагов.

Значение Значение
SECQOP_WRAP_NO_ENCRYPT
Сообщение не было зашифровано, но был создан заголовок или трейлер.
Примечание: KERB_WRAP_NO_ENCRYPT имеет то же значение и то же значение.
SIGN_ONLY
При использовании дайджест-поставщика общих служб используйте этот флаг, если для контекста безопасности задана проверка только подписи . Дополнительные сведения см. в разделе Качество защиты.

Возвращаемое значение

Если функция проверяет, получено ли сообщение в правильной последовательности, функция возвращает SEC_E_OK.

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

Код возврата Описание
SEC_E_BUFFER_TOO_SMALL Буфер сообщений слишком мал. Используется с поставщиком дайджест-служб.
SEC_E_CRYPTO_SYSTEM_INVALID Шифр, выбранный для контекста безопасности, не поддерживается. Используется с поставщиком дайджест-служб.
SEC_E_INCOMPLETE_MESSAGE Данные во входном буфере являются неполными. Приложению необходимо считывать дополнительные данные с сервера и снова вызывать DecryptMessage (Digest).
SEC_E_INVALID_HANDLE Недопустимый дескриптор контекста был указан в параметре phContext . Используется с поставщиком дайджест-служб.
SEC_E_MESSAGE_ALTERED Сообщение изменено. Используется с поставщиком дайджест-служб.
SEC_E_OUT_OF_SEQUENCE Сообщение не было получено в правильной последовательности.
SEC_E_QOP_NOT_SUPPORTED Контекст безопасности не поддерживает ни конфиденциальность, ни целостность. Используется с поставщиком дайджест-служб.

Комментарии

Иногда приложение считывает данные удаленной стороны, пытается расшифровать их с помощью DecryptMessage (Digest) и обнаруживает, что DecryptMessage (Digest) выполнено успешно, но выходные буферы пусты. Это нормальное поведение, и приложения должны иметь возможность работать с ним.

Windows XP: Эта функция также известна как UnsealMessage. Теперь приложения должны использовать только DecryptMessage (Digest).

Требования

Требование Значение
Минимальная версия клиента Windows XP [только классические приложения]
Минимальная версия сервера Windows Server 2003 [только классические приложения]
Заголовок Sspi.h (включая Security.h)
Библиотека Secur32.lib
DLL Secur32.dll

См. также раздел