DecryptMessage (一般) 函式會解密訊息。 某些套件不會加密和解密訊息,而是執行並檢查完整性 哈希。
摘要 式安全性支援提供者 (SSP) 僅提供用戶端與伺服器之間交換之訊息的加密和解密機密性,作為SASL機制。
此函式也會與 Schannel SSP 搭配使用,以向訊息傳送者發出要求,以重新談判連接屬性或關閉連線。
備註
如果一個線程正在加密,另一個線程正在加密,另一個線程正在解密,則可以同時從單一安全性支援提供者介面 (SSPI) 內容中的兩個不同線程呼叫 EncryptMessage (一般) 和 DecryptMessage (一般)。 如果一個以上的線程正在加密,或一個以上的線程正在解密,則每個線程都應該取得唯一的內容。
如需搭配特定 SSP 使用此函式的相關信息,請參閱下列主題。
| 主題 | 說明 |
|---|---|
| DecryptMessage (摘要) | 使用摘要解密訊息。 |
| DecryptMessage (Kerberos) | 使用 Kerberos 解密訊息。 |
| DecryptMessage (交涉) | 使用 Negotiate 解密訊息。 |
| DecryptMessage (NTLM) | 使用 NTLM 解密訊息。 |
| DecryptMessage (安全通道) | 使用 Schannel 解密訊息。 |
語法
SECURITY_STATUS SEC_Entry DecryptMessage(
_In_ PCtxtHandle phContext,
_Inout_ PSecBufferDesc pMessage,
_In_ ULONG MessageSeqNo,
_Out_ PULONG pfQOP
);
參數
-
phContext [in]
-
要用來解密訊息 之安全性內容的 句柄。
-
pMessage [in, out]
-
SecBufferDesc 結構的指標。 在輸入時,結構會參考一或多個 SecBuffer 結構。 其中一個可能是類型SECBUFFER_DATA。 該緩衝區包含加密的訊息。 加密的訊息會就地解密,並覆寫其緩衝區的原始內容。
使用摘要式 SSP 時,在輸入時,結構會參考一或多個 SecBuffer 結構。 其中一個必須是類型SECBUFFER_DATA或SECBUFFER_STREAM,而且必須包含加密的訊息。
使用 Schannel SSP 搭配非連線導向的內容時,在輸入時,結構必須包含四 個 SecBuffer 結構。 只有一個緩衝區的類型必須SECBUFFER_DATA,並包含已加密的訊息,該訊息已就地解密。 其餘的緩衝區會用於輸出,且必須是類型SECBUFFER_EMPTY。 對於連線導向內容,必須提供SECBUFFER_DATA類型緩衝區,如非連接導向內容所述。 此外,也必須提供包含安全性令牌的第二個SECBUFFER_TOKEN類型緩衝區。
-
MessageSeqNo [in]
-
傳輸應用程式預期的序號,如果有的話。 如果傳輸應用程式未維護序號,此參數必須設定為零。
使用摘要 SSP 時,此參數必須設定為零。 摘要式 SSP 會在內部管理序號。
使用 Schannel SSP 時,此參數必須設定為零。 安全通道 SSP 不使用序號。
-
pfQOP [出局]
-
ULONG 類型的變數指標,會接收指出保護品質的套件特定旗標。
使用 Schannel SSP 時,不會使用此參數,而且應該設定為 NULL。
此參數可以是下列其中一個旗標。
價值 意義 SECQOP_WRAP_NO_ENCRYPT 訊息未加密,但會產生標頭或預告片。
注意: KERB_WRAP_NO_ENCRYPT具有相同的值和相同的意義。- SIGN_ONLY
使用摘要式 SSP 時,當 安全性內容 設定為僅驗證 簽章 時,請使用此旗標。 如需詳細資訊,請參閱 保護品質。
返回值
如果函式確認訊息是以正確的順序接收,函式會傳回SEC_E_OK。
如果函式無法解密訊息,它會傳回下列其中一個錯誤碼。
| 回傳碼 | 說明 |
|---|---|
|
訊息緩衝區太小。 與摘要 SSP 搭配使用。 |
|
不支援為安全性內容選擇的加密。 與摘要 SSP 搭配使用。 |
|
輸入緩衝區中的數據不完整。 應用程式需要從伺服器讀取更多數據並再次調用 DecryptMessage (General)。 |
|
在 phContext 參數中指定了無效的內容句柄。 與 Digest 和 Schannel SSP 搭配使用。 |
|
緩衝區的類型錯誤,或找不到類型SECBUFFER_DATA的緩衝區。 與安全通道 SSP 搭配使用。 |
|
已變更訊息。 與 Digest 和 Schannel SSP 搭配使用。 |
|
訊息未以正確的順序接收。 |
|
安全性內容不支持機密性和完整性。 與摘要 SSP 搭配使用。 |
|
訊息傳送者已使用連線完成,並已起始關機。 如需起始或辨識關機的相關信息,請參閱 關閉通道連線。 與安全通道 SSP 搭配使用。 |
|
遠端合作物件需要新的交握順序,或應用程式剛起始關機。 返回交涉迴圈並呼叫 AcceptSecurityContext (一般) 或 InitializeSecurityContext (一般),並傳遞空的輸入緩衝區。 如果函式傳回類型 為 SEC_BUFFER_EXTRA 的緩衝區,則這應該以輸入緩衝區的形式傳遞至 AcceptSecurityContext (General) 函式。 與安全通道 SSP 搭配使用。 Schannel 核心模式不支援重新談判。 呼叫端應該忽略這個傳回值或關閉連線。 如果忽略值,客戶端或伺服器可能會因此關閉連線。 |
備註
當您使用 Schannel SSP 時,當訊息傳送者關閉連線時, DecryptMessage (一般) 函式會傳回SEC_I_CONTEXT_EXPIRED。 如需起始或辨識關機的相關信息,請參閱 關閉通道連線。
當您使用 Schannel SSP 時,當訊息傳送者想要重新談判連線時,DecryptMessage (一般) 會傳回SEC_I_RENEGOTIATE。 應用程式會藉由呼叫 AcceptSecurityContext (一般) 或 InitializeSecurityContext (一般) (用戶端 ) 來處理要求的重新談判,並傳入空的輸入緩衝區。 在此初始呼叫傳回值之後,請繼續執行,就像您的應用程式正在建立新的連線一樣。 如需詳細資訊,請參閱 [建立安全通道 安全性內容](creating-an-schannel-security-context.md)。
如需與 GSSAPI 互通的相關信息,請參閱 SSPI/Kerberos 與 GSSAPI 的互作性。
需求
| 要求 | 價值 |
|---|---|
| 最低支援的用戶端 |
Windows XP [僅限傳統型應用程式] |
| 最低支援的伺服器 |
Windows Server 2003 [僅限傳統型應用程式] |
| 頁首 |
|
| 圖書館 |
|
| DLL |
|
另請參閱