DecryptMessage (Kerberos) 函数解密消息。 某些包不加密和解密消息,而是执行并检查完整性 哈希。
注释
如果一个线程正在加密,另一个线程正在解密,则可以同时从单个安全支持提供程序接口 (SSPI) 上下文中的两个不同的线程调用 EncryptMessage (Kerberos) 和 DecryptMessage (Kerberos)。 如果多个线程正在加密,或者多个线程正在解密,则每个线程应获取唯一的上下文。
语法
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
参数
phContext [in]
用于解密消息 的安全上下文 的句柄。
pMessage [in, out]
指向 SecBufferDesc 结构的指针。 在输入时,该结构引用一个或多个可能类型为 SECBUFFER_DATA 的 SecBuffer 结构。 缓冲区包含加密的消息。 加密消息已就地解密,覆盖其缓冲区的原始内容。
MessageSeqNo [in]
传输应用程序预期的序列号(如果有)。 如果传输应用程序不维护序列号,则必须将此参数设置为零。
pfQOP [出局]
指向 ULONG 类型的变量的指针,该变量接收指示保护质量的包特定标志。
此参数可以是以下标志。
| 价值 | 含义 |
|---|---|
| SECQOP_WRAP_NO_ENCRYPT | 他的信息没有加密,但产生了标头或预告片。 |
注释
KERB_WRAP_NO_ENCRYPT具有相同的值和相同的含义。
返回值
如果函数验证消息是否按正确的顺序接收,该函数将返回SEC_E_OK。
如果函数无法解密消息,它将返回以下错误代码之一。
| 返回代码 | 说明 |
|---|---|
| SEC_E_INCOMPLETE_MESSAGE | 输入缓冲区中的数据不完整。 应用程序需要从服务器读取更多数据并再次调用 DecryptMessage (Kerberos)。 |
| SEC_E_OUT_OF_SEQUENCE | 消息未按正确的顺序接收。 |
注解
有时,应用程序将从远程方读取数据,尝试使用 DecryptMessage (Kerberos) 对其进行解密,并发现 DecryptMessage (Kerberos) 成功,但输出缓冲区为空。 这是正常行为,应用程序必须能够处理它。
有关与 GSSAPI 互作的信息,请参阅 SSPI/Kerberos 与 GSSAPI 的互作性。
Windows XP: 此函数也称为 UnsealMessage。 应用程序现在应仅使用 DecryptMessage (Kerberos)。
要求
| 要求 | 价值 |
|---|---|
| 支持的最低客户端 | Windows XP [仅限桌面应用] |
| 支持的最低服务器 | Windows Server 2003 [仅限桌面应用] |
| 标题 | Sspi.h(包括 Security.h) |
| 图书馆 | Secur32.lib |
| DLL | Secur32.dll |