Функция DecryptMessage (General)
Функция DecryptMessage (General) расшифровывает сообщение. Некоторые пакеты не шифруют и не расшифровывают сообщения, а выполняют и проверка хэш целостности.
Поставщик поддержки безопасности дайджеста (SSP) обеспечивает конфиденциальность шифрования и расшифровки для сообщений, передаваемых между клиентом и сервером только в качестве механизма SASL.
Эта функция также используется с поставщиком Schannel SSP, чтобы сообщить о запросе от отправителя сообщения на повторное согласование (повтор) атрибутов подключения или завершение подключения.
Примечание
EncryptMessage (General) и DecryptMessage (General) можно вызывать одновременно из двух разных потоков в одном контексте интерфейса поставщика поддержки безопасности (SSPI), если один поток шифруется, а другой расшифровывается. Если шифруется несколько потоков или расшифровывается несколько потоков, каждый поток должен получить уникальный контекст.
Сведения об использовании этой функции с определенным поставщиком общих служб см. в следующих разделах.
Раздел | Описание |
---|---|
DecryptMessage (дайджест) | Расшифровывает сообщение с помощью дайджеста. |
DecryptMessage (Kerberos) | Расшифровывает сообщение с помощью Kerberos. |
DecryptMessage (Negotiate) | Расшифровывает сообщение с помощью negotiate. |
DecryptMessage (NTLM) | Расшифровывает сообщение с помощью NTLM. |
DecryptMessage (Schannel) | Расшифровывает сообщение с помощью Schannel. |
Синтаксис
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
Параметры
-
phContext [in]
-
Дескриптор контекста безопасности , который будет использоваться для расшифровки сообщения.
-
pMessage [вход, выход]
-
Указатель на структуру SecBufferDesc . Во входных данных структура ссылается на одну или несколько структур SecBuffer . Один из них может быть типа SECBUFFER_DATA. Этот буфер содержит зашифрованное сообщение. Зашифрованное сообщение расшифровывается на месте, перезаписывается исходное содержимое буфера.
При использовании дайджест-поставщика общих служб для входных данных структура ссылается на одну или несколько структур SecBuffer . Один из них должен иметь тип SECBUFFER_DATA или SECBUFFER_STREAM и содержать зашифрованное сообщение.
При использовании Schannel SSP с контекстами, которые не ориентированы на подключение, для входных данных структура должна содержать четыре структуры SecBuffer . Только один буфер должен иметь тип SECBUFFER_DATA и содержать зашифрованное сообщение, которое расшифровывается на месте. Остальные буферы используются для вывода и должны иметь тип SECBUFFER_EMPTY. Для контекстов, ориентированных на подключение, необходимо предоставить буфер типа SECBUFFER_DATA, как указано для контекстов, не ориентированных на подключение. Кроме того, необходимо указать второй буфер типа SECBUFFER_TOKEN, содержащий маркер безопасности.
-
MessageSeqNo [in]
-
Порядковый номер, ожидаемый приложением транспорта, если таковой есть. Если транспортное приложение не поддерживает порядковые номера, для этого параметра необходимо задать нулевое значение.
При использовании дайджест-поставщика общих служб этот параметр должен иметь нулевое значение. Поставщик дайджест-служб SSP управляет порядковой нумеровой строкой внутри системы.
При использовании Schannel SSP этому параметру необходимо задать нулевое значение. Поставщик Schannel SSP не использует порядковые номера.
-
pfQOP [out]
-
Указатель на переменную типа ULONG , которая получает флаги конкретного пакета, указывающие на качество защиты.
При использовании Schannel SSP этот параметр не используется и должен иметь значение NULL.
Этот параметр может быть одним из следующих флагов.
Значение Значение SECQOP_WRAP_NO_ENCRYPT Сообщение не было зашифровано, но был создан заголовок или трейлер.
Примечание: KERB_WRAP_NO_ENCRYPT имеет то же значение и одинаковое значение.- SIGN_ONLY
При использовании дайджест-поставщика общих служб используйте этот флаг, если в контексте безопасности задана проверка только сигнатуры . Дополнительные сведения см. в разделе Качество защиты.
Возвращаемое значение
Если функция проверяет, получено ли сообщение в правильной последовательности, функция возвращает SEC_E_OK.
Если функции не удается расшифровать сообщение, она возвращает один из следующих кодов ошибок.
Код возврата | Описание |
---|---|
|
Буфер сообщений слишком мал. Используется с поставщиком дайджест-служб. |
|
Шифр, выбранный для контекста безопасности, не поддерживается. Используется с поставщиком дайджест-служб. |
|
Данные во входном буфере являются неполными. Приложению необходимо считывать дополнительные данные с сервера и снова вызывать DecryptMessage (Общие). |
|
Недопустимый дескриптор контекста был указан в параметре phContext . Используется с дайджест-серверами и Schannel SSP. |
|
Буферы имеют неправильный тип или буфер типа SECBUFFER_DATA не найден. Используется с Schannel SSP. |
|
Сообщение изменено. Используется с дайджест-серверами и Schannel SSP. |
|
Сообщение не было получено в правильной последовательности. |
|
Контекст безопасности не поддерживает ни конфиденциальность, ни целостность. Используется с поставщиком дайджест-служб. |
|
Отправитель сообщения завершил использование подключения и инициировал завершение работы. Сведения об инициации или распознавании завершения работы см. в разделе Завершение работы подключения Schannel. Используется с Schannel SSP. |
|
Удаленной стороне требуется новая последовательность подтверждения, или приложение только что инициировало завершение работы. Вернитесь в цикл согласования и вызовите AcceptSecurityContext (General) или InitializeSecurityContext (General), передав пустые входные буферы. Если функция возвращает буфер типа SEC_BUFFER_EXTRA, он должен быть передан в функцию AcceptSecurityContext (General) в качестве входного буфера. Используется с Schannel SSP. Повторное согласование не поддерживается для режима ядра Schannel. Вызывающий объект должен либо игнорировать это возвращаемое значение, либо завершить подключение. Если значение игнорируется, клиент или сервер могут завершить подключение. |
Комментарии
При использовании Schannel SSP функция DecryptMessage (Общие) возвращает SEC_I_CONTEXT_EXPIRED, когда отправитель сообщения завершил подключение. Сведения об инициации или распознавании завершения работы см. в разделе Завершение работы подключения Schannel.
При использовании Schannel SSP DecryptMessage (Общие) возвращает SEC_I_RENEGOTIATE, когда отправителю сообщения требуется повторное согласование подключения (контекст безопасности). Приложение обрабатывает запрошенное повторное согласование, вызывая AcceptSecurityContext (Общее) ( на стороне сервера) или InitializeSecurityContext (Общее) ( на стороне клиента) и передавая пустые входные буферы. После того как этот первоначальный вызов возвращает значение, продолжайте, как если бы приложение создавало новое подключение. Дополнительные сведения см. в разделе [Создание контекста безопасности Schannel](creating-an-schannel-security-context.md).
Сведения о взаимодействии с GSSAPI см. в статье Взаимодействие SSPI/Kerberos с GSSAPI.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента |
Windows XP [только классические приложения] |
Минимальная версия сервера |
Windows Server 2003 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|
См. также раздел