Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die DecryptMessage -Funktion (Allgemein) entschlüsselt eine Nachricht. Einige Pakete verschlüsseln und entschlüsseln keine Nachrichten, sondern führen einen Integritätshash aus und überprüfen sie.
Der Digest-Sicherheitsunterstützungsanbieter (Digest Security Support Provider , SSP) bietet Verschlüsselungs- und Entschlüsselungsgeheimnis für Nachrichten, die nur als SASL-Mechanismus zwischen Client und Server ausgetauscht werden.
Diese Funktion wird auch mit dem Schannel-SSP verwendet, um eine Anforderung eines Nachrichtenabsenders für eine Neuverhandlung (Wiederholen) der Verbindungsattribute oder für das Herunterfahren der Verbindung zu signalisieren.
Hinweis
EncryptMessage (General) und DecryptMessage (General) können gleichzeitig aus zwei verschiedenen Threads in einem einzigen SSPI-Kontext ( Security Support Provider Interface ) aufgerufen werden, wenn ein Thread verschlüsselt und die andere entschlüsselt wird. Wenn mehr als ein Thread verschlüsselt wird oder mehrere Threads entschlüsselt werden, sollte jeder Thread einen eindeutigen Kontext abrufen.
Informationen zur Verwendung dieser Funktion mit einem bestimmten SSP finden Sie in den folgenden Themen.
| Thema | BESCHREIBUNG |
|---|---|
| DecryptMessage (Zusammenfassung) | Entschlüsselt eine Nachricht mithilfe von Digest. |
| DecryptMessage (Kerberos) | Entschlüsselt eine Nachricht mithilfe von Kerberos. |
| DecryptMessage (Aushandeln) | 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
);
Die Parameter
-
phContext [in]
-
Ein Handle für den Sicherheitskontext , der zum Entschlüsseln der Nachricht verwendet werden soll.
-
pMessage [ein, aus]
-
Ein Zeiger auf eine SecBufferDesc-Struktur . Bei der Eingabe verweist die Struktur auf mindestens eine SecBuffer-Struktur . Eine dieser Typen kann SECBUFFER_DATA sein. Dieser Puffer enthält die verschlüsselte Nachricht. Die verschlüsselte Nachricht wird direkt entschlüsselt, wobei der ursprüngliche Inhalt des Puffers überschrieben wird.
Bei Verwendung des Digest-SSP verweist die Struktur auf eine oder mehrere SecBuffer-Strukturen . Einer davon muss vom Typ SECBUFFER_DATA oder SECBUFFER_STREAM sein, und er muss die verschlüsselte Nachricht enthalten.
Bei Verwendung des Schannel-SSP mit Kontexten, die nicht verbindungsorientiert sind, muss die Struktur vier SecBuffer-Strukturen enthalten. Genau ein Puffer muss vom Typ SECBUFFER_DATA sein und eine verschlüsselte Nachricht enthalten, die direkt 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 [eingehen]
-
Die Sequenznummer, die von der Transportanwendung erwartet wird, falls vorhanden. Wenn die Transportanwendung keine Sequenznummern verwaltet, muss dieser Parameter auf Null festgelegt werden.
Bei Verwendung des Digest-SSP muss dieser Parameter auf Null festgelegt werden. Der Digest-SSP verwaltet die Sequenznummerierung intern.
Bei Verwendung des Schannel-SSP muss dieser Parameter auf Null festgelegt werden. Der Schannel-SSP verwendet keine Sequenznummern.
-
pfQOP [aus]
-
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 eine der folgenden Flags sein.
Wert Bedeutung SECQOP_WRAP_NO_ENCRYPT Die Nachricht wurde nicht verschlüsselt, aber eine Kopfzeile oder ein Trailer wurde erstellt.
Anmerkung: KERB_WRAP_NO_ENCRYPT hat denselben Wert und dieselbe Bedeutung.- SIGN_ONLY
Wenn Sie den Digest-SSP verwenden, verwenden Sie dieses Kennzeichen, wenn der Sicherheitskontext so festgelegt ist, dass nur die Signatur überprüft wird. 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 eine der folgenden Fehlercodes zurückgegeben.
| Rückgabecode | BESCHREIBUNG |
|---|---|
|
Der Nachrichtenpuffer ist zu klein. Wird mit dem Digest-SSP verwendet. |
|
Die für den Sicherheitskontext ausgewählte Chiffre wird nicht unterstützt. Wird mit dem Digest-SSP verwendet. |
|
Die Daten im Eingabepuffer sind unvollständig. Die Anwendung muss weitere Daten vom Server lesen und DecryptMessage (General) erneut aufrufen. |
|
Ein ungültiges Kontexthandle wurde im phContext-Parameter angegeben. Wird mit digest und Schannel SSPs verwendet. |
|
Die Puffer weisen den falschen Typ auf, oder es wurde kein Puffer vom Typ gefunden, SECBUFFER_DATA gefunden wurde. Wird mit dem Schannel SSP verwendet. |
|
Die Nachricht wurde geändert. Wird mit digest und Schannel SSPs verwendet. |
|
Die Nachricht wurde nicht in der richtigen Reihenfolge empfangen. |
|
Weder Vertraulichkeit noch Integrität werden vom Sicherheitskontext unterstützt. Wird mit dem Digest-SSP verwendet. |
|
Der Absender der Nachricht wurde mit der Verbindung fertig gestellt und hat ein Herunterfahren initiiert. Informationen zum Initiieren oder Erkennen eines Herunterfahrens finden Sie unter Herunterfahren einer Schannel-Verbindung. Wird mit dem Schannel SSP verwendet. |
|
Für die Remoteparty ist eine neue Handshakesequenz erforderlich, oder die Anwendung hat gerade ein 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 dies als Eingabepuffer an die AcceptSecurityContext (General) -Funktion übergeben werden. Wird mit dem Schannel SSP verwendet. Die Neuverhandlung wird für den Schannel-Kernelmodus nicht unterstützt. Der Aufrufer sollte diesen Rückgabewert ignorieren oder die Verbindung herunterfahren. Wenn der Wert ignoriert wird, wird die Verbindung möglicherweise vom Client oder vom Server beendet. |
Bemerkungen
Wenn Sie den Schannel-SSP verwenden, gibt die Funktion DecryptMessage (General) 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 (General) SEC_I_RENEGOTIATE zurück, wenn der Absender der Nachricht die Verbindung neu verhandeln möchte (Sicherheitskontext). Eine Anwendung behandelt eine angeforderte Neuverhandlung durch Aufrufen von AcceptSecurityContext (General) ( Serverseite) oder InitializeSecurityContext (Allgemein) (Clientseite ) und Übergeben leerer Eingabepuffer. Nachdem dieser anfängliche Aufruf einen Wert zurückgegeben hat, fahren Sie fort, als ob Ihre Anwendung eine neue Verbindung erstellt habe. Weitere Informationen finden Sie unter [Creating an Schannel security context](creating-an-schannel-security-context.md).
Informationen zur Interoperabilität mit GSSAPI finden Sie unter SSPI/Kerberos-Interoperabilität mit GSSAPI.
Anforderungen
| Anforderung | Wert |
|---|---|
| Mindest unterstützter Client |
Windows XP [nur Desktop-Apps] |
| Unterstützter Server (Mindestversion) |
Windows Server 2003 [Nur Desktop-Apps] |
| Kopfzeile |
|
| Bibliothek |
|
| DLL |
|
Siehe auch