共用方式為


DecryptMessage (一般) 函式

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。

如果函式無法解密訊息,它會傳回下列其中一個錯誤碼。

回傳碼 說明
SEC_E_BUFFER_TOO_SMALL
訊息緩衝區太小。 與摘要 SSP 搭配使用。
SEC_E_CRYPTO_SYSTEM_INVALID
不支援為安全性內容選擇的加密。 與摘要 SSP 搭配使用。
SEC_E_INCOMPLETE_MESSAGE
輸入緩衝區中的數據不完整。 應用程式需要從伺服器讀取更多數據並再次調用 DecryptMessage (General)。
SEC_E_INVALID_HANDLE
在 phContext 參數中指定了無效的內容句柄。 與 Digest 和 Schannel SSP 搭配使用。
SEC_E_INVALID_TOKEN
緩衝區的類型錯誤,或找不到類型SECBUFFER_DATA的緩衝區。 與安全通道 SSP 搭配使用。
SEC_E_MESSAGE_ALTERED
已變更訊息。 與 Digest 和 Schannel SSP 搭配使用。
SEC_E_OUT_OF_SEQUENCE
訊息未以正確的順序接收。
SEC_E_QOP_NOT_SUPPORTED
安全性內容不支持機密性和完整性。 與摘要 SSP 搭配使用。
SEC_I_CONTEXT_EXPIRED
訊息傳送者已使用連線完成,並已起始關機。 如需起始或辨識關機的相關信息,請參閱 關閉通道連線。 與安全通道 SSP 搭配使用。
SEC_I_RENEGOTIATE
遠端合作物件需要新的交握順序,或應用程式剛起始關機。 返回交涉迴圈並呼叫 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 [僅限傳統型應用程式]
頁首
Sspi.h (包括 Security.h)
圖書館
Secur32.lib
DLL
Secur32.dll

另請參閱

SSPI 函式

EncryptMessage (一般)

秒緩衝區

SecBufferDesc