EncryptMessage (一般) 函式會加密訊息以提供隱私權。 EncryptMessage (一般) 可讓應用程式選擇所選機制所支援 的密碼編譯演算法 。 EncryptMessage (一般) 函式會使用內容句柄所參考的安全性內容。 某些套件沒有要加密或解密的訊息,而是提供可檢查的完整性 哈希 。
使用摘要 式安全性支援提供者 (SSP) 時,此函式僅供SASL機制使用。
使用 Schannel SSP 時,此函式會使用與接收訊息之遠端合作物件交涉的 會話密鑰 來加密訊息。 加密演算法是由使用中的 [加密 套件](加密-suites-in-schannel.md) 決定。
備註
如果一個線程正在加密,另一個線程正在加密,另一個線程正在解密,則可以同時從單一安全性支援提供者介面 (SSPI) 內容中的兩個不同線程呼叫 EncryptMessage (一般) 和 DecryptMessage (一般)。 如果一個以上的線程正在加密,或一個以上的線程正在解密,則每個線程都應該取得唯一的內容。
如需搭配特定 SSP 使用此函式的相關信息,請參閱下列主題。
| 主題 | 說明 |
|---|---|
| EncryptMessage (摘要) | 使用摘要加密訊息以提供隱私權。 |
| EncryptMessage (Kerberos) | 使用 Kerberos 加密訊息以提供隱私權。 |
| EncryptMessage (交涉) | 使用 Negotiate 加密訊息以提供隱私權。 |
| EncryptMessage (NTLM) | 加密訊息,以使用NTLM提供隱私權。 |
| EncryptMessage (安全通道) | 使用安全通道加密訊息以提供隱私權。 |
語法
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具有相同的值和相同的意義。 |
|
傳送安全通道警示訊息。 在此情況下, pMessage 參數必須包含標準的雙位元組 SSL/TLS 事件碼。 只有安全通道 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 結構。 輸出緩衝區的大小是 cbMaxSignature 和 cbBlockSize 成員中值的總和。
不使用 SSL 的應用程式必須提供類型為 SECBUFFER_PADDING 的 SecBuffer 。
MessageSeqNo [in]
傳輸應用程式指派給訊息的序號。 如果傳輸應用程式未維護序號,此參數必須為零。
使用摘要 SSP 時,此參數必須設定為零。 摘要式 SSP 會在內部管理序號。
使用 Schannel SSP 時,此參數必須設定為零。 安全通道 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 結構。 輸出緩衝區的大小是 cbMaxSignature 和 cbBlockSize 成員中值的總和。
搭配 Schannel SSP 使用時, pMessage 參數必須包含具有下列緩衝區的 SecBufferDesc 結構。
備註
這些緩衝區必須依顯示的順序提供。
| 緩衝區類型 | 說明 |
|---|---|
| SECBUFFER_STREAM_HEADER | 在內部使用。 不需要初始化。 |
| SECBUFFER_DATA | 包含要加密的 純文字 訊息。 |
| SECBUFFER_STREAM_TRAILER | 在內部使用。 不需要初始化。 |
| SECBUFFER_EMPTY | 在內部使用。 不需要初始化。 大小可以是零。 |
當您使用 Schannel SSP 時,呼叫 QueryContextAttributes (General) 函式並指定SECPKG_ATTR_STREAM_SIZES屬性,以判斷每個緩衝區的大小上限。 此函式會傳回 SecPkgContext_StreamSizes 結構,其成員包含標頭 (cbHeader 成員)、訊息 (cbMaximumMessage 成員) 和預告片 (cbTrailer 成員) 緩衝區的大小上限。
為了獲得最佳效能,應該從連續記憶體配置 pMessage 結構。
Windows XP/2000: 此函式也稱為 SealMessage。 應用程式現在應該只使用 EncryptMessage (一般) 。
需求
| 要求 | 價值 |
|---|---|
| 最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
| 最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
| 頁首 |
|
| 圖書館 |
|
| DLL |
|