共用方式為


DecryptMessage (General) 函式

DecryptMessage (一般) 函式會解密訊息。 某些套件不會加密和解密訊息,而是執行並檢查完整性 雜湊

摘要 式安全性支援提供者 (SSP) 僅提供用戶端與伺服器之間交換之訊息的加密和解密機密性。

此函式也與 Schannel SSP 搭配使用,以向訊息傳送者發出要求,以便重新交涉 (重做) 連線屬性或關閉連線。

注意

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

 

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

主題 描述
DecryptMessage (Digest) 使用摘要解密訊息。
DecryptMessage (Kerberos) 使用 Kerberos 解密訊息。
DecryptMessage (Negotiate) 使用 Negotiate 解密訊息。
DecryptMessage (NTLM) 使用 NTLM 解密訊息。
DecryptMessage (Schannel) 使用 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 時,此參數必須設定為零。 Schannel SSP 不會使用序號。

pfQOP [out]

ULONG類型的變數指標,可接收指出保護品質的套件特定旗標。

使用 Schannel SSP 時,不會使用此參數,而且應該設定為 Null

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

意義
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 (General)
SEC_E_INVALID_HANDLE
phCoNtext 參數中指定了不正確內容控制碼。 與摘要和通道 SSP 搭配使用。
SEC_E_INVALID_TOKEN
緩衝區的類型錯誤,或找不到類型SECBUFFER_DATA的緩衝區。 搭配 Schannel SSP 使用。
SEC_E_MESSAGE_ALTERED
訊息已改變。 與摘要和通道 SSP 搭配使用。
SEC_E_OUT_OF_SEQUENCE
訊息未以正確的順序接收。
SEC_E_QOP_NOT_SUPPORTED
安全性內容不支援機密性和完整性。 與摘要 SSP 搭配使用。
SEC_I_CONTEXT_EXPIRED
訊息傳送者已完成連線,並已起始關機。 如需起始或辨識關機的資訊,請參閱 關閉通道連線。 搭配 Schannel SSP 使用。
SEC_I_RENEGOTIATE
遠端合作物件需要新的交握順序,或應用程式剛起始關機。 返回交涉迴圈,並呼叫 AcceptSecurityCoNtext (General) InitializeSecurityCoNtext (General) ,傳遞空的輸入緩衝區。
如果函式傳回類型 為 SEC_BUFFER_EXTRA的緩衝區,這應該傳遞至 AcceptSecurityCoNtext (General) 函式作為輸入緩衝區。
搭配 Schannel SSP 使用。
Schannel 核心模式不支援重新分類。 呼叫端應該忽略這個傳回值或關閉連線。 如果忽略此值,用戶端或伺服器可能會因此關閉連線。

 

備註

當您使用安全通道 SSP 時,當訊息傳送者關閉連線時, DecryptMessage (General) 函式會傳回SEC_I_CONTEXT_EXPIRED。 如需起始或辨識關機的相關資訊,請參閱 關閉安全通道連線

當您使用安全通道 SSP 時,當訊息傳送者想要重新交涉連線 (安全性內容) 時,DecryptMessage (General) 會傳回SEC_I_RENEGOTIATE。 應用程式會呼叫 AcceptSecurityCoNtext (General) (伺服器端) 或 InitializeSecurityCoNtext (一般 ) (用戶端) 並傳入空白輸入緩衝區,來處理要求的重新交涉。 在此初始呼叫傳回值之後,請繼續進行,就像您的應用程式正在建立新的連線一樣。 For more information, see [Creating an Schannel security context](creating-an-schannel-security-context.md).

如需與 GSSAPI 交互操作的詳細資訊,請參閱 SSPI/Kerberos 與 GSSAPI 的互通性

規格需求

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

另請參閱

SSPI 函式

EncryptMessage (一般)

SecBuffer

SecBufferDesc