DecryptMessage (Kerberos) 函数

DecryptMessage (Kerberos) 函数解密消息。 某些包不会加密和解密消息,而是执行并检查完整性哈希

注意

如果一个线程正在加密,另一个线程正在解密,则可以同时从单个安全支持提供程序接口中的两个不同线程调用 EncryptMessage ( (Kerberos) 和 DecryptMessage) (Kerberos ) 。 如果多个线程正在加密,或者多个线程正在解密,则每个线程应获取唯一的上下文。

语法

SECURITY_STATUS SEC_Entry DecryptMessage(
  _In_    PCtxtHandle    phContext,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo,
  _Out_   PULONG         pfQOP
);

parameters

phContext [in]

用于解密消息 的安全上下文 的句柄。

pMessage [in, out]

指向 SecBufferDesc 结构的指针。 在输入时,结构引用一个或多个可能属于 SECBUFFER_DATA 类型的 SecBuffer 结构。 缓冲区包含加密的消息。 加密的消息将就地解密,覆盖其缓冲区的原始内容。

MessageSeqNo [in]

传输应用程序预期的序列号(如果有)。 如果传输应用程序不保留序列号,则必须将此参数设置为零。

pfQOP [out]

指向 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

Windowsxp: 此函数也称为 UnsealMessage。 应用程序现在应仅使用 DecryptMessage (Kerberos)

要求

要求
最低受支持的客户端 Windows XP [仅限桌面应用]
最低受支持的服务器 Windows Server 2003 [仅限桌面应用]
标头 Sspi.h (包括 Security.h)
Secur32.lib
DLL Secur32.dll

请参阅