Delen via


DecryptMessage (Algemeen) functie

De functie DecryptMessage (Algemeen) ontsleutelt een bericht. Sommige pakketten versleutelen en ontsleutelen berichten niet, maar voeren een integriteits-hash uit en controleren.

De Digest-provider voor beveiligingsondersteuning (SSP) biedt alleen vertrouwelijkheid van versleuteling en ontsleuteling voor berichten die worden uitgewisseld tussen client en server als SASL-mechanisme.

Deze functie wordt ook gebruikt met de Schannel-SSP om een aanvraag van een afzender van een bericht te signaleren voor een heronderhandeling (opnieuw) van de verbindingskenmerken of voor het afsluiten van de verbinding.

Opmerking

EncryptMessage (Algemeen) en DecryptMessage (Algemeen) kunnen tegelijkertijd worden aangeroepen vanuit twee verschillende threads in één SSPI-context ( Security Support Provider Interface ) als één thread wordt versleuteld en de andere wordt ontsleuteld. Als meer dan één thread wordt versleuteld of meer dan één thread ontsleutelt, moet elke thread een unieke context verkrijgen.

 

Zie de volgende onderwerpen voor informatie over het gebruik van deze functie met een specifieke SSP.

Onderwerp Beschrijving
DecryptMessage (Samenvatting) Ontsleutelt een bericht met behulp van Digest.
DecryptMessage (Kerberos) Ontsleutelt een bericht met behulp van Kerberos.
DecryptMessage (onderhandelen) Ontsleutelt een bericht met behulp van Negotiate.
DecryptMessage (NTLM) Ontsleutelt een bericht met behulp van NTLM.
DecryptMessage (Schannel) Ontsleutelt een bericht met behulp van Schannel.

 

Syntaxis

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

Parameterwaarden

phContext [in]

Een ingang voor de beveiligingscontext die moet worden gebruikt om het bericht te ontsleutelen.

pMessage [in, uit]

Een aanwijzer naar een SecBufferDesc-structuur . Bij invoer verwijst de structuur naar een of meer SecBuffer-structuren . Een van deze kan van het type SECBUFFER_DATA zijn. Deze buffer bevat het versleutelde bericht. Het versleutelde bericht wordt op zijn plaats ontsleuteld, waarbij de oorspronkelijke inhoud van de buffer wordt overschreven.

Wanneer u de digest-SSP gebruikt, verwijst de structuur bij invoer naar een of meer SecBuffer-structuren . Een van deze moet van het type SECBUFFER_DATA of SECBUFFER_STREAM zijn en moet het versleutelde bericht bevatten.

Wanneer u de Schannel-SSP gebruikt met contexten die niet zijn verbonden, moet de structuur bij invoer vier SecBuffer-structuren bevatten. Precies één buffer moet van het type SECBUFFER_DATA zijn en een versleuteld bericht bevatten, dat op zijn plaats is ontsleuteld. De resterende buffers worden gebruikt voor uitvoer en moeten van het type SECBUFFER_EMPTY zijn. Voor verbindingsgeoriënteerde contexten moet een SECBUFFER_DATA typebuffer worden opgegeven, zoals aangegeven voor niet-verbonden contexten. Daarnaast moet ook een tweede SECBUFFER_TOKEN typebuffer met een beveiligingstoken worden opgegeven.

MessageSeqNo [in]

Het volgnummer dat wordt verwacht door de transporttoepassing, indien van toepassing. Als de transporttoepassing geen volgnummers onderhoudt, moet deze parameter worden ingesteld op nul.

Wanneer u de Digest-SSP gebruikt, moet deze parameter worden ingesteld op nul. De Digest SSP beheert de volgnummering intern.

Wanneer u de Schannel-SSP gebruikt, moet deze parameter worden ingesteld op nul. De Schannel-SSP gebruikt geen volgnummers.

pfQOP [uit]

Een aanwijzer naar een variabele van het type ULONG die pakketspecifieke vlaggen ontvangt die de kwaliteit van de beveiliging aangeven.

Wanneer u de Schannel-SSP gebruikt, wordt deze parameter niet gebruikt en moet deze worden ingesteld op NULL.

Deze parameter kan een van de volgende vlaggen zijn.

Waarde Betekenis
SECQOP_WRAP_NO_ENCRYPT
Het bericht is niet versleuteld, maar er is een koptekst of trailer geproduceerd.
Notitie: KERB_WRAP_NO_ENCRYPT heeft dezelfde waarde en dezelfde betekenis.
SIGN_ONLY
Wanneer u de digest-SSP gebruikt, gebruikt u deze vlag wanneer de beveiligingscontext is ingesteld om alleen de handtekening te controleren. Zie Quality of Protection voor meer informatie.

 

Retourwaarde

Als de functie controleert of het bericht in de juiste volgorde is ontvangen, retourneert de functie SEC_E_OK.

Als de functie het bericht niet kan ontsleutelen, wordt een van de volgende foutcodes geretourneerd.

Retourcode Beschrijving
SEC_E_BUFFER_TOO_SMALL
De berichtbuffer is te klein. Wordt gebruikt met de Digest-SSP.
SEC_E_CRYPTO_SYSTEM_INVALID
De gekozen codering voor de beveiligingscontext wordt niet ondersteund. Wordt gebruikt met de Digest-SSP.
SEC_E_INCOMPLETE_MESSAGE
De gegevens in de invoerbuffer zijn onvolledig. De applicatie moet meer gegevens van de server lezen en DecryptMessage (General) opnieuw aanroepen.
SEC_E_INVALID_HANDLE
Er is een contextgreep opgegeven die niet geldig is in de parameter phContext . Wordt gebruikt met de Digest- en Schannel-SSP's.
SEC_E_INVALID_TOKEN
De buffers zijn van het verkeerde type of geen buffer van het type SECBUFFER_DATA is gevonden. Wordt gebruikt met de Schannel-SSP.
SEC_E_MESSAGE_ALTERED
Het bericht is gewijzigd. Wordt gebruikt met de Digest- en Schannel-SSP's.
SEC_E_OUT_OF_SEQUENCE
Het bericht is niet in de juiste volgorde ontvangen.
SEC_E_QOP_NOT_SUPPORTED
Vertrouwelijkheid en integriteit worden niet ondersteund door de beveiligingscontext. Wordt gebruikt met de Digest-SSP.
SEC_I_CONTEXT_EXPIRED
De afzender van het bericht is klaar met het gebruik van de verbinding en heeft een afsluiting gestart. Zie Een Schannel-verbinding afsluitenvoor meer informatie over het initiëren of herkennen van een afsluiting. Wordt gebruikt met de Schannel-SSP.
SEC_I_RENEGOTIATE
De externe partij vereist een nieuwe handshake-reeks of de toepassing heeft zojuist een afsluiting gestart. Ga terug naar de onderhandelingslus en roep AcceptSecurityContext (Algemeen) of InitializeSecurityContext (Algemeen) aan, waarbij lege invoerbuffers worden doorgegeven.
Als de functie een buffer van het type SEC_BUFFER_EXTRA retourneert, moet deze worden doorgegeven aan de functie AcceptSecurityContext (Algemeen) als invoerbuffer.
Wordt gebruikt met de Schannel-SSP.
Heronderhandeling wordt niet ondersteund voor de Schannel-kernelmodus. De aanroeper moet deze retourwaarde negeren of de verbinding afsluiten. Als de waarde wordt genegeerd, kan de client of de server de verbinding afsluiten als gevolg hiervan.

 

Opmerkingen

Wanneer u de Schannel-SSP gebruikt, retourneert de functie DecryptMessage (Algemeen) SEC_I_CONTEXT_EXPIRED wanneer de afzender van het bericht de verbinding heeft afgesloten. Zie Een Schannel-verbinding afsluitenvoor meer informatie over het initiëren of herkennen van een afsluiting.

Wanneer u de Schannel-SSP gebruikt, retourneert DecryptMessage (Algemeen) SEC_I_RENEGOTIATE wanneer de afzender van het bericht de verbinding wil heronderhandelen (beveiligingscontext). Een toepassing verwerkt een aangevraagde heronderhandeling door AcceptSecurityContext (Algemeen) (serverzijde) of InitializeSecurityContext (Algemeen) ( clientzijde) aan te roepen en lege invoerbuffers door te geven. Nadat deze eerste aanroep een waarde retourneert, gaat u verder alsof uw toepassing een nieuwe verbinding heeft gemaakt. Zie [Een Schannel-beveiligingscontext maken](creating-an-schannel-security-context.md) voor meer informatie.

Zie SSPI/Kerberos Interoperability met GSSAPI voor meer informatie over samenwerking met GSSAPI.

Vereisten

Voorwaarde Waarde
Minimaal ondersteunde client
Windows XP [alleen desktop-apps]
Minimaal ondersteunde server
Windows Server 2003 [alleen desktop-apps]
Koptekst
Sspi.h (inclusief Security.h)
Bibliotheek
Secur32.lib
DLL
Secur32.dll

Zie ook

SSPI-functies

EncryptMessage (algemeen)

SecBuffer-

SecBufferDesc-