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