EncryptMessage (General) 函式

EncryptMessage (General) 函式會加密訊息以提供隱私權EncryptMessage (一般) 可讓應用程式選擇所選機制所支援 的密碼編譯演算法EncryptMessage (General) 函式會使用內容控制碼所參考的安全性內容。 某些套件沒有要加密或解密的訊息,而是提供可檢查的完整性 雜湊

使用摘要 式安全性支援提供者 (SSP) 時,此函式僅供 SASL 機制使用。

使用 Schannel SSP 時,此函式會使用與將接收訊息的遠端合作方交涉的 工作階段金鑰 來加密訊息。 加密演算法是由 [加密 套件]所決定, (使用中的 加密suites-in-schannel.md) 。

注意

當單一安全性支援提供者介面 (SSPI) 內容 (SSPI) 內容時,可以從單一安全性支援提供者介面中的兩個不同執行緒同時呼叫EncryptMess (age) 和 DecryptMessage (General) 。 如果一個以上的執行緒正在加密,或一個以上的執行緒正在解密,則每個執行緒都應該取得唯一的內容。

如需搭配特定 SSP 使用此函式的相關資訊,請參閱下列主題。

主題 描述
EncryptMessage (摘要) 使用摘要加密訊息以提供隱私權。
EncryptMessage (Kerberos) 使用 Kerberos 加密訊息以提供隱私權。
EncryptMessage (Negotiate) 使用 Negotiate 加密訊息以提供隱私權。
EncryptMessage (NTLM) 使用 NTLM 加密訊息以提供隱私權。
EncryptMessage (Schannel) 使用 Schannel 加密訊息以提供隱私權。

語法

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

參數

phCoNtext [in]

用來加密訊息 之安全性內容的 控制碼。

fQOP [in]

指出保護品質的套件特定旗標。 安全性套件可以使用此參數來啟用密碼編譯演算法的選取。

使用摘要 SSP 時,此參數必須設定為零。

此參數可以是下列其中一個旗標。

意義
SECQOP_WRAP_NO_ENCRYPT
產生標頭或預告片,但不會加密訊息。
注意: KERB_WRAP_NO_ENCRYPT具有相同的值和相同的意義。
SECQOP_WRAP_OOB_DATA
傳送安全通道警示訊息。 在此情況下, pMessage 參數必須包含標準的雙位元組 SSL/TLS 事件碼。 只有 Schannel SSP 才支援此值。

pMessage [in, out]

SecBufferDesc結構的指標。 在輸入上,結構會參考一或多個 SecBuffer 結構。 其中一個可以是類型SECBUFFER_DATA。 該緩衝區包含要加密的訊息。 訊息已就地加密,並覆寫 結構的原始內容。

函式不會使用 SECBUFFER_READONLY 屬性處理緩衝區。

包含訊息的 SecBuffer 結構長度不能大於 cbMaximumMessage,這是從 QueryCoNtextAttributes (General) (SECPKG_ATTR_STREAM_SIZES) 函式取得。

使用摘要 SSP 時,必須有第二個類型為 SECBUFFER_PADDING 或 SEC_BUFFER_DATA 的緩衝區,才能保存 簽章 資訊。 若要取得輸出緩衝區的大小,請呼叫 QueryCoNtextAttributes (General) 函式並指定SECPKG_ATTR_SIZES。 函式會傳回 SecPkgCoNtext_Sizes 結構。 輸出緩衝區的大小是 cbMaxSignaturecbBlockSize 成員中的值總和。

不使用 SSL 的應用程式必須提供類型為 SECBUFFER_PADDING 的 SecBuffer

MessageSeqNo [in]

傳輸應用程式指派給訊息的序號。 如果傳輸應用程式未維護序號,此參數必須為零。

使用摘要 SSP 時,此參數必須設定為零。 摘要 SSP 會在內部管理序號。

使用 Schannel SSP 時,此參數必須設定為零。 Schannel SSP 不會使用序號。

傳回值

如果函式成功,函式會傳回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 (一般) 函式會根據安全性內容的訊息和工作階段金鑰來加密訊息。

如果傳輸應用程式建立了 安全性內容 以支援序列偵測,而呼叫端提供序號,則函式會包含此資訊與加密訊息。 包括這項資訊可防止重新執行、插入和隱藏訊息。 安全性套件包含從傳輸應用程式傳遞的序號。

當您使用摘要式 SSP 時,呼叫 QueryCoNtextAttributes (General) 函式並指定SECPKG_ATTR_SIZES,以取得輸出緩衝區的大小。 函式會傳回 SecPkgCoNtext_Sizes 結構。 輸出緩衝區的大小是 cbMaxSignaturecbBlockSize 成員中的值總和。

搭配 Schannel SSP 使用時, pMessage 參數必須包含具有下列緩衝區的 SecBufferDesc 結構。

注意

這些緩衝區必須依顯示的順序提供。

緩衝區類型 描述
SECBUFFER_STREAM_HEADER 內部使用。 不需要初始化。
SECBUFFER_DATA 包含要加密的 純文字 訊息。
SECBUFFER_STREAM_TRAILER 內部使用。 不需要初始化。
SECBUFFER_EMPTY 內部使用。 不需要初始化。 大小可以是零。

當您使用安全通道 SSP 時,呼叫 QueryCoNtextAttributes (General) 函式並指定 SECPKG_ATTR_STREAM_SIZES 屬性,以判斷每個緩衝區的大小上限。 此函式會傳回 SecPkgCoNtext_StreamSizes 結構,其成員包含 標頭 (cbHeader 成員) 的大小上限、訊息 (cbMaximumMessage 成員) 和預告片 (cbTrailer 成員) 緩衝區。

為了獲得最佳效能,應該從連續記憶體配置 pMessage 結構。

Windows XP/2000: 此函式也稱為 SealMessage。 應用程式現在應該只使用 EncryptMessage (一般)

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
標頭
Sspi.h (包含 Security.h)
程式庫
Secur32.lib
DLL
Secur32.dll

另請參閱