EncryptMessage (NTLM) 函数

EncryptMessage (NTLM) 函数加密消息以提供隐私EncryptMessage (NTLM) 允许应用程序在所选机制支持的 加密算法 之间进行选择。 EncryptMessage (NTLM) 函数使用上下文句柄引用的安全上下文。 某些包没有要加密或解密的消息,而是提供可以检查的完整性 哈希

注释

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

语法

SECURITY_STATUS SEC_Entry EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

参数

phContext [in]

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

fQOP [in]

指示保护质量的特定于包的标志。 安全包可以使用此参数启用加密算法的选择。

此参数可以是以下标志。

价值 含义
SECQOP_WRAP_NO_ENCRYPT
生成标头或预告片,但不加密消息。
注意: KERB_WRAP_NO_ENCRYPT具有相同的值和相同的含义。

pMessage [in, out]

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

该函数不处理具有SECBUFFER_READONLY属性的缓冲区。

包含消息的 SecBuffer 结构的长度不得大于从 QueryContextAttributes (NTLM) (SECPKG_ATTR_STREAM_SIZES) 函数获取的 cbMaximumMessage

不使用 SSL 的应用程序必须提供类型为 SECBUFFER_PADDING 的 SecBuffer

MessageSeqNo [in]

传输应用程序分配给消息的序列号。 如果传输应用程序不维护序列号,此参数必须为零。

返回值

如果函数成功,该函数将返回SEC_E_OK。

如果函数失败,它将返回以下错误代码之一。

返回代码 说明
SEC_E_BUFFER_TOO_SMALL 输出缓冲区太小。 有关详细信息,请参阅“备注”。
SEC_E_CONTEXT_EXPIRED 应用程序引用已关闭的上下文。 正确写入的应用程序不应收到此错误。
SEC_E_CRYPTO_SYSTEM_INVALID 不支持为安全上下文选择的密码
SEC_E_INSUFFICIENT_MEMORY 没有足够的内存可用于完成请求的操作。
SEC_E_INVALID_HANDLE phContext 参数中指定了无效的上下文句柄。
SEC_E_INVALID_TOKEN 找不到SECBUFFER_DATA类型缓冲区。
SEC_E_QOP_NOT_SUPPORTED> 安全上下文既不支持保密性,也不支持完整性

注解

EncryptMessage (NTLM) 函数基于消息和安全上下文中的会话密钥加密消息。

如果传输应用程序创建了支持序列检测 的安全上下文 ,并且调用方提供了序列号,则函数将此信息与加密消息一起包含。 包括此信息可防止重播、插入和抑制消息。 安全包包含从传输应用程序传递的序列号。

注释

必须按显示的顺序提供这些缓冲区。

缓冲区类型 说明
SECBUFFER_STREAM_HEADER 内部使用。 无需初始化。
SECBUFFER_DATA 包含要加密的 纯文本 消息。
SECBUFFER_STREAM_TRAILER 内部使用。 无需初始化。
SECBUFFER_EMPTY 内部使用。 无需初始化。 大小可以为零。

为了获得最佳性能,应从连续内存中分配 pMessage 结构。

Windows XP: 此函数也称为 SealMessage。 应用程序现在应仅使用 EncryptMessage (NTLM)。

要求

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

另请参阅