Freigeben über


DecryptMessage-Funktion (Allgemein)

Die DecryptMessage-Funktion (Allgemein) entschlüsselt eine Nachricht. Einige Pakete ver- und entschlüsseln keine Nachrichten, sondern führen einen Integritätshash aus und überprüfen sie.

Der Digest Security Support Provider (SSP) bietet Verschlüsselungs- und Entschlüsselungsgeheimnisse für Nachrichten, die zwischen Client und Server nur als SASL-Mechanismus ausgetauscht werden.

Diese Funktion wird auch mit dem Schannel-SSP verwendet, um eine Anforderung eines Nachrichtensenders für eine Neuverhandlung (Wiederholung) der Verbindungsattribute oder für ein Herunterfahren der Verbindung zu signalisieren.

Hinweis

EncryptMessage (Allgemein) und DecryptMessage (Allgemein) können gleichzeitig aus zwei verschiedenen Threads in einem einzelnen SSPI-Kontext ( Security Support Provider Interface ) aufgerufen werden, wenn ein Thread verschlüsselt und der andere entschlüsselt. Wenn mehr als ein Thread verschlüsselt wird oder mehrere Threads entschlüsselt werden, sollte jeder Thread einen eindeutigen Kontext erhalten.

 

Informationen zur Verwendung dieser Funktion mit einem bestimmten SSP finden Sie in den folgenden Themen.

Thema BESCHREIBUNG
DecryptMessage (Digest) Entschlüsselt eine Nachricht mithilfe von Digest.
DecryptMessage (Kerberos) Entschlüsselt eine Nachricht mithilfe von Kerberos.
DecryptMessage (Negotiate) Entschlüsselt eine Nachricht mithilfe von Negotiate.
DecryptMessage (NTLM) Entschlüsselt eine Nachricht mithilfe von NTLM.
DecryptMessage (Schannel) Entschlüsselt eine Nachricht mithilfe von Schannel.

 

Syntax

SECURITY_STATUS SEC_Entry DecryptMessage(
  _In_    PCtxtHandle    phContext,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo,
  _Out_   PULONG         pfQOP
);

Parameter

phContext [in]

Ein Handle für den Sicherheitskontext , der zum Entschlüsseln der Nachricht verwendet werden soll.

pMessage [in, out]

Ein Zeiger auf eine SecBufferDesc-Struktur . Bei der Eingabe verweist die -Struktur auf eine oder mehrere SecBuffer-Strukturen . Eine davon kann vom Typ SECBUFFER_DATA sein. Dieser Puffer enthält die verschlüsselte Nachricht. Die verschlüsselte Nachricht wird an Ort und Stelle entschlüsselt, wodurch der ursprüngliche Inhalt des Puffers überschrieben wird.

Bei Verwendung des Digest-SSP verweist die Struktur bei der Eingabe auf eine oder mehrere SecBuffer-Strukturen . Eines davon muss vom Typ SECBUFFER_DATA oder SECBUFFER_STREAM sein und die verschlüsselte Nachricht enthalten.

Wenn Sie den Schannel-SSP mit Kontexten verwenden, die nicht verbindungsorientiert sind, muss die Struktur bei der Eingabe vier SecBuffer-Strukturen enthalten. Genau ein Puffer muss vom Typ SECBUFFER_DATA sein und eine verschlüsselte Nachricht enthalten, die bereits entschlüsselt wird. Die verbleibenden Puffer werden für die Ausgabe verwendet und müssen vom Typ SECBUFFER_EMPTY sein. Für verbindungsorientierte Kontexte muss ein SECBUFFER_DATA Typpuffer bereitgestellt werden, wie für nicht verbindungsorientierte Kontexte angegeben. Darüber hinaus muss auch ein zweiter SECBUFFER_TOKEN Typpuffer bereitgestellt werden, der ein Sicherheitstoken enthält.

MessageSeqNo [in]

Die von der Transportanwendung erwartete Sequenznummer, falls vorhanden. Wenn die Transportanwendung keine Sequenznummern verwaltet, muss dieser Parameter auf Null festgelegt werden.

Bei Verwendung des Digest-SSP muss dieser Parameter auf 0 festgelegt werden. Der Digest-SSP verwaltet die Sequenznummerierung intern.

Wenn Sie den Schannel-SSP verwenden, muss dieser Parameter auf 0 (null) festgelegt werden. Der Schannel-SSP verwendet keine Sequenznummern.

pfQOP [out]

Ein Zeiger auf eine Variable vom Typ ULONG , die paketspezifische Flags empfängt, die die Qualität des Schutzes angeben.

Bei Verwendung des Schannel-SSP wird dieser Parameter nicht verwendet und sollte auf NULL festgelegt werden.

Dieser Parameter kann eines der folgenden Flags sein.

Wert Bedeutung
SECQOP_WRAP_NO_ENCRYPT
Die Nachricht wurde nicht verschlüsselt, aber ein Header oder Trailer wurde erstellt.
Hinweis: KERB_WRAP_NO_ENCRYPT hat den gleichen Wert und die gleiche Bedeutung.
SIGN_ONLY
Wenn Sie den Digest-SSP verwenden, verwenden Sie dieses Flag, wenn der Sicherheitskontext so festgelegt ist, dass nur die Signatur überprüft wird. Weitere Informationen finden Sie unter Qualität des Schutzes.

 

Rückgabewert

Wenn die Funktion überprüft, ob die Nachricht in der richtigen Reihenfolge empfangen wurde, gibt die Funktion SEC_E_OK zurück.

Wenn die Funktion die Nachricht nicht entschlüsseln kann, gibt sie einen der folgenden Fehlercodes zurück.

Rückgabecode Beschreibung
SEC_E_BUFFER_TOO_SMALL
Der Nachrichtenpuffer ist zu klein. Wird mit dem Digest-SSP verwendet.
SEC_E_CRYPTO_SYSTEM_INVALID
Die für den Sicherheitskontext ausgewählte Verschlüsselung wird nicht unterstützt. Wird mit dem Digest-SSP verwendet.
SEC_E_INCOMPLETE_MESSAGE
Die Daten im Eingabepuffer sind unvollständig. Die Anwendung muss weitere Daten vom Server lesen und DecryptMessage (Allgemein) erneut aufrufen.
SEC_E_INVALID_HANDLE
Im parameter phContext wurde ein ungültiges Kontexthandle angegeben. Wird mit den SSPs "Digest" und "Schannel" verwendet.
SEC_E_INVALID_TOKEN
Die Puffer haben den falschen Typ, oder es wurde kein Puffer vom Typ SECBUFFER_DATA gefunden. Wird mit dem Schannel-SSP verwendet.
SEC_E_MESSAGE_ALTERED
Die Nachricht wurde geändert. Wird mit den SSPs "Digest" und "Schannel" verwendet.
SEC_E_OUT_OF_SEQUENCE
Die Nachricht wurde nicht in der richtigen Reihenfolge empfangen.
SEC_E_QOP_NOT_SUPPORTED
Weder Vertraulichkeit noch Integrität werden vom Sicherheitskontext unterstützt. Wird mit dem Digest-SSP verwendet.
SEC_I_CONTEXT_EXPIRED
Der Absender der Nachricht hat die Verwendung der Verbindung beendet und ein Herunterfahren initiiert. Informationen zum Initiieren oder Erkennen eines Herunterfahrens finden Sie unter Herunterfahren einer Schannel-Verbindung. Wird mit dem Schannel-SSP verwendet.
SEC_I_RENEGOTIATE
Die Remotepartei benötigt eine neue Handshakesequenz, oder die Anwendung hat gerade ein Herunterfahren initiiert. Kehren Sie zur Aushandlungsschleife zurück, und rufen Sie AcceptSecurityContext (Allgemein) oder InitializeSecurityContext (Allgemein) auf, und übergeben Sie leere Eingabepuffer.
Wenn die Funktion einen Puffer vom Typ SEC_BUFFER_EXTRA zurückgibt, sollte dieser als Eingabepuffer an die AcceptSecurityContext -Funktion (Allgemein) übergeben werden.
Wird mit dem Schannel-SSP verwendet.
Neuverhandlung wird für den Schannel-Kernelmodus nicht unterstützt. Der Aufrufer sollte diesen Rückgabewert entweder ignorieren oder die Verbindung herunterfahren. Wenn der Wert ignoriert wird, wird die Verbindung möglicherweise vom Client oder vom Server heruntergefahren.

 

Hinweise

Wenn Sie den Schannel-SSP verwenden, gibt die DecryptMessage-Funktion (Allgemein) SEC_I_CONTEXT_EXPIRED zurück, wenn der Nachrichtensender die Verbindung beendet hat. Informationen zum Initiieren oder Erkennen eines Herunterfahrens finden Sie unter Herunterfahren einer Schannel-Verbindung.

Wenn Sie den Schannel-SSP verwenden, gibt DecryptMessage (Allgemein) SEC_I_RENEGOTIATE zurück, wenn der Absender der Nachricht die Verbindung neu aushandeln möchte (Sicherheitskontext). Eine Anwendung verarbeitet eine angeforderte Neuverhandlung, indem AcceptSecurityContext (Allgemein) ( serverseitig) oder InitializeSecurityContext (Allgemein) ( Clientseite) aufgerufen und leere Eingabepuffer übergeben werden. Nachdem dieser anfängliche Aufruf einen Wert zurückgegeben hat, fahren Sie so fort, als ob Ihre Anwendung eine neue Verbindung erstellt. Weitere Informationen finden Sie unter [Erstellen eines Schannel-Sicherheitskontexts](creating-an-schannel-security-context.md).

Informationen zur Zusammenarbeit mit GSSAPI finden Sie unter SSPI/Kerberos-Interoperabilität mit GSSAPI.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows Server 2003 [nur Desktop-Apps]
Header
Sspi.h (einschließlich Security.h)
Bibliothek
Secur32.lib
DLL
Secur32.dll

Siehe auch

SSPI-Funktionen

EncryptMessage (Allgemein)

SecBuffer

SecBufferDesc