decryptMessage 函数 (sspi.h)

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

摘要 式安全支持提供程序 (SSP) 仅为作为 SASL 机制在客户端和服务器之间交换的消息提供加密和解密机密性。

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

语法

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

参数

[in] phContext

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

[in, out] pMessage

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

使用摘要 SSP 时,在输入时,结构引用一个或多个 SecBuffer 结构。 其中一个类型必须为 SECBUFFER_DATA 或 SECBUFFER_STREAM,并且必须包含加密的消息。

[in] MessageSeqNo

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

使用摘要 SSP 时,此参数必须设置为零。 摘要 SSP 在内部管理序列号。

[out] pfQOP

指向 ULONG 类型的变量的指针,该变量接收指示保护质量的包特定标志。

此参数可以是以下标志之一。

含义
SECQOP_WRAP_NO_ENCRYPT
消息未加密,但生成了标头或尾部。
注意 KERB_WRAP_NO_ENCRYPT具有相同的值和含义。
 
SIGN_ONLY
使用摘要 SSP 时,在安全上下文设置为仅验证 签名 时使用此标志。 有关详细信息,请参阅 质量保护

返回值

如果函数验证是否按正确的顺序接收了消息,则函数将返回SEC_E_OK。

如果函数无法解密消息,它将返回以下错误代码之一。

返回代码 说明
SEC_E_BUFFER_TOO_SMALL
消息缓冲区太小。 与摘要 SSP 一起使用。
SEC_E_CRYPTO_SYSTEM_INVALID
不支持为安全上下文选择的密码。 与摘要 SSP 一起使用。
SEC_E_INCOMPLETE_MESSAGE
输入缓冲区中的数据不完整。 应用程序需要从服务器读取更多数据,并再次调用 DecryptMessage (Digest)
SEC_E_INVALID_HANDLE
phContext 参数中指定了无效的上下文句柄。 与摘要 SSP 一起使用。
SEC_E_MESSAGE_ALTERED
消息已更改。 与摘要 SSP 一起使用。
SEC_E_OUT_OF_SEQUENCE
未按正确的顺序接收消息。
SEC_E_QOP_NOT_SUPPORTED
安全上下文不支持保密性和 完整性 。 与摘要 SSP 一起使用。

注解

有时,应用程序将从远程方读取数据,尝试使用 DecryptMessage (Digest) 对其进行解密,并发现 DecryptMessage (Digest) 成功,但输出缓冲区为空。 这是正常行为,应用程序必须能够处理它。

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

要求

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

另请参阅

EncryptMessage (摘要)

SSPI 函数

SecBuffer

SecBufferDesc