DecryptMessage(General)-Funktion

Die DecryptMessage (General)-Funktion entschlüsselt eine Nachricht. Einige Pakete verschlüsseln und entschlüsseln Nachrichten nicht, sondern führen stattdessen einen Integritätshashaus und überprüfen sie.

Der Digestsicherheits-Supportanbieter (SSP) bietet Verschlüsselungs- und Entschlüsselungsvertraulichkeit für Nachrichten, die zwischen Client und Server als SASL-Mechanismus ausgetauscht werden.

Diese Funktion wird auch mit dem Schannel-SSP verwendet, um eine Anforderung von einem Nachrichtensender für eine Neuaushandlung (Wiederholung) der Verbindungsattribute oder für das Herunterfahren der Verbindung zu signalisieren.

Hinweis

EncryptMessage (Allgemein) und DecryptMessage (Allgemein) können gleichzeitig von zwei verschiedenen Threads in einem SSPI-Kontext (Security Support Provider Interface) aufgerufen werden, wenn ein Thread verschlüsselt und der andere entschlüsselt wird. 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 mit kerberos.
DecryptMessage (Negotiate) Entschlüsselt eine Nachricht mit negotiate.
DecryptMessage (NTLM) Entschlüsselt eine Nachricht mit 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 dieser Daten kann vom Typ SECBUFFER _ DATA sein. Dieser Puffer enthält die verschlüsselte Nachricht. Die verschlüsselte Nachricht wird vor Ort entschlüsselt und überschreibt den ursprünglichen Inhalt des Puffers.

Bei Verwendung des Digest-SSP verweist die Struktur bei der Eingabe auf eine oder mehrere SecBuffer-Strukturen. Eine dieser Nachrichten 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 vor Ort 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-DATENTYPpuffer bereitgestellt werden, wie für nicht verbindungsorientierte Kontexte angegeben. Darüber hinaus muss ein zweiter SECBUFFER _ TOKEN-Typpuffer angegeben werden, der ein Sicherheitstoken enthält.

MessageSeqNo [ In]

Die von der Transportanwendung erwartete Sequenznummer, sofern vorhanden. Wenn die Transportanwendung keine Sequenznummern verwaltet, muss dieser Parameter auf 0 (null) festgelegt werden.

Bei Verwendung des Digest-SSP muss dieser Parameter auf 0 (null) 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 Nachspann wurde erstellt.
[!Note]
KERB_WRAP_NO_ENCRYPT hat den gleichen Wert und dieselbe Bedeutung.

SIGN_ONLY
Wenn Sie den Digest-SSP verwenden, verwenden Sie dieses Flag, wenn der Sicherheitskontext festgelegt ist, um nur die Signatur zu überprüfen. Weitere Informationen finden Sie unter Quality of Protection.

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, wird einer der folgenden Fehlercodes zurückgegeben.

Rückgabecode Beschreibung
SEC _ E _ BUFFER _ TOO _ SMALL
Der Nachrichtenpuffer ist zu klein. Wird mit dem Digest-SSP verwendet.
SEC _ E _ CRYPTO _ SYSTEM _ INVALID
Das für den Sicherheitskontext ausgewählte Verschlüsselungsverfahren 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
Ein ungültiges Kontexthandle wurde im phContext-Parameter angegeben. Wird mit den Digest- und Schannel-SSPs 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 Digest- und Schannel-SSPs verwendet.
SEC _ E _ OUT _ OF _ SEQUENCE
Die Nachricht wurde nicht in der richtigen Reihenfolge empfangen.
SEC _ E _ QOP NICHT _ _ UNTERSTÜTZT
Weder Vertraulichkeit noch Integrität werden vom Sicherheitskontextunterstützt. Wird mit dem Digest-SSP verwendet.
SEC _ I _ CONTEXT _ EXPIRED
Der Absender der Nachricht hat die Verbindung beendet und das Herunterfahren initiiert. Informationen zum Initiieren oder Erkennen eines Herunterfahrens finden Sie unter Herunterfahren einer Schannel-Verbindung. Wird mit dem Schannel-SSP verwendet.
SEC _ I _ NEU AUSHANDELN
Die Remotepartei erfordert eine neue Handshakesequenz, oder die Anwendung hat gerade das Herunterfahren initiiert. Kehren Sie zur Aushandlungsschleife zurück, und rufen Sie AcceptSecurityContext (General) oder InitializeSecurityContext (General)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 (General)-Funktion ü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 beenden. Wenn der Wert ignoriert wird, kann entweder der Client oder der Server die Verbindung als Ergebnis herunterfahren.

Hinweise

Wenn Sie den Schannel-SSP verwenden, gibt die DecryptMessage (General)-Funktion SEC _ I CONTEXT EXPIRED _ _ zurück, wenn der Absender der Nachricht 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 _ MOONGOTIATE 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) (clientseitig) aufgerufen und leere Eingabepuffer übergeben werden. Nachdem dieser anfängliche Aufruf einen Wert zurückgegeben hat, fahren Sie so fort, als würde Ihre Anwendung eine neue Verbindung erstellen. Weitere Informationen finden Sie unter [Erstellen eines Schannel-Sicherheitskontexts. ](creating-an-schannel-security-context.md)

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

Anforderungen

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

Weitere Informationen

SSPI-Funktionen

EncryptMessage (Allgemein)

SecBuffer

SecBufferDesc