Partager via


Fonction DecryptMessage (Général)

La fonction DecryptMessage (General) déchiffre un message. Certains packages ne chiffrent pas et déchiffrent les messages, mais effectuent et vérifient plutôt un hachage d’intégrité.

Le fournisseur de support de sécurité Digest fournit le chiffrement et la confidentialité du déchiffrement pour les messages échangés entre le client et le serveur en tant que mécanisme SASL uniquement.

Cette fonction est également utilisée avec le SSP Schannel pour signaler une demande d’expéditeur de message pour une renégociation (rétablissement) des attributs de connexion ou pour un arrêt de la connexion.

Remarque

EncryptMessage (Général) et DecryptMessage (Général) peuvent être appelés en même temps à partir de deux threads différents dans un contexte SSPI ( Security Support Provider Interface ) unique si un thread est chiffré et que l’autre déchiffre. Si plusieurs threads chiffrent ou plusieurs threads sont déchiffrés, chaque thread doit obtenir un contexte unique.

 

Pour plus d’informations sur l’utilisation de cette fonction avec un fournisseur de services partagés spécifique, consultez les rubriques suivantes.

Sujet Descriptif
Déchiffrement DecryptMessage (Digest) Déchiffre un message à l’aide de Digest.
Déchiffrement DecryptMessage (Kerberos) Déchiffre un message à l’aide de Kerberos.
DecryptMessage (Négocier) Déchiffre un message à l’aide de Negotiate.
DéchiffrerMessage (NTLM) Déchiffre un message à l’aide de NTLM.
DecryptMessage (Schannel) Déchiffre un message à l’aide de Schannel.

 

Syntaxe

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

Paramètres

phContext [dans]

Handle vers le contexte de sécurité à utiliser pour déchiffrer le message.

pMessage [entrée, sortie]

Pointeur vers une structure SecBufferDesc . Lors de l’entrée, la structure fait référence à une ou plusieurs structures SecBuffer . L’un d’eux peut être de type SECBUFFER_DATA. Cette mémoire tampon contient le message chiffré. Le message chiffré est déchiffré en place, en remplaçant le contenu d’origine de sa mémoire tampon.

Lorsque vous utilisez le SSP Digest, en entrée, la structure fait référence à une ou plusieurs structures SecBuffer . L’un d’eux doit être de type SECBUFFER_DATA ou SECBUFFER_STREAM, et il doit contenir le message chiffré.

Lorsque vous utilisez le SSP Schannel avec des contextes qui ne sont pas orientés vers la connexion, sur l’entrée, la structure doit contenir quatre structures SecBuffer . Exactement une mémoire tampon doit être de type SECBUFFER_DATA et contenir un message chiffré, qui est déchiffré en place. Les mémoires tampons restantes sont utilisées pour la sortie et doivent être de type SECBUFFER_EMPTY. Pour les contextes orientés connexion, une mémoire tampon de type SECBUFFER_DATA doit être fournie, comme indiqué pour les contextes non orientés connexion. En outre, une deuxième mémoire tampon de type SECBUFFER_TOKEN qui contient un jeton de sécurité doit également être fournie.

MessageSeqNo [dans]

Numéro de séquence attendu par l’application de transport, le cas échéant. Si l’application de transport ne conserve pas de numéros de séquence, ce paramètre doit être défini sur zéro.

Lors de l’utilisation du SSP Digest, ce paramètre doit être défini sur zéro. Le SSP Digest gère la numérotation séquentielle en interne.

Lorsque vous utilisez le SSP Schannel, ce paramètre doit être défini sur zéro. Le SSP Schannel n’utilise pas de numéros de séquence.

pfQOP [sortie]

Pointeur vers une variable de type ULONG qui reçoit des indicateurs spécifiques au package qui indiquent la qualité de la protection.

Lorsque vous utilisez le SSP Schannel, ce paramètre n’est pas utilisé et doit être défini sur NULL.

Ce paramètre peut être l’un des indicateurs suivants.

Valeur Sens
SECQOP_WRAP_NO_ENCRYPT
Le message n’a pas été chiffré, mais un en-tête ou une bande-annonce a été produit.
Note: KERB_WRAP_NO_ENCRYPT a la même valeur et la même signification.
SIGN_ONLY
Lorsque vous utilisez le SSP Digest, utilisez cet indicateur lorsque le contexte de sécurité est défini pour vérifier la signature uniquement. Pour plus d’informations, consultez Qualité de la protection.

 

Valeur de retour

Si la fonction vérifie que le message a été reçu dans la séquence correcte, la fonction retourne SEC_E_OK.

Si la fonction ne parvient pas à déchiffrer le message, elle retourne l’un des codes d’erreur suivants.

Code de retour Descriptif
SEC_E_BUFFER_TOO_SMALL
La mémoire tampon de message est trop petite. Utilisé avec le SSP Digest.
SEC_E_CRYPTO_SYSTEM_INVALID
Le chiffrement choisi pour le contexte de sécurité n’est pas pris en charge. Utilisé avec le SSP Digest.
SEC_E_INCOMPLETE_MESSAGE
Les données de la mémoire tampon d’entrée sont incomplètes. L’application doit lire davantage de données à partir du serveur et appeler à nouveau DecryptMessage (General).
SEC_E_INVALID_HANDLE
Un handle de contexte qui n’est pas valide a été spécifié dans le paramètre phContext . Utilisé avec les SSP Digest et Schannel.
SEC_E_INVALID_TOKEN
Les mémoires tampons sont de type incorrect ou aucune mémoire tampon de type SECBUFFER_DATA a été trouvée. Utilisé avec le SSP Schannel.
SEC_E_MESSAGE_ALTERED
Le message a été modifié. Utilisé avec les SSP Digest et Schannel.
SEC_E_OUT_OF_SEQUENCE
Le message n’a pas été reçu dans la séquence correcte.
SEC_E_QOP_NOT_SUPPORTED
Ni la confidentialité ni l’intégrité ne sont prises en charge par le contexte de sécurité. Utilisé avec le SSP Digest.
SEC_I_CONTEXT_EXPIRED
L’expéditeur du message a terminé d’utiliser la connexion et a lancé un arrêt. Pour plus d’informations sur le lancement ou la reconnaissance d’un arrêt, consultez Arrêter une connexion Schannel. Utilisé avec le SSP Schannel.
SEC_I_RENEGOTIATE
La partie distante nécessite une nouvelle séquence de négociation ou l’application vient de lancer un arrêt. Revenez à la boucle de négociation et appelez AcceptSecurityContext (Général) ou InitializeSecurityContext (Général), en passant des mémoires tampons d’entrée vides.
Si la fonction retourne une mémoire tampon de type SEC_BUFFER_EXTRA, elle doit être transmise à la fonction AcceptSecurityContext (Général) en tant que mémoire tampon d’entrée.
Utilisé avec le SSP Schannel.
La renégociation n’est pas prise en charge pour le mode noyau Schannel. L’appelant doit ignorer cette valeur de retour ou arrêter la connexion. Si la valeur est ignorée, le client ou le serveur peut donc arrêter la connexion.

 

Remarques

Lorsque vous utilisez le SSP Schannel, la fonction DecryptMessage (Général) retourne SEC_I_CONTEXT_EXPIRED lorsque l’expéditeur du message a arrêté la connexion. Pour plus d’informations sur le lancement ou la reconnaissance d’un arrêt, consultez Arrêter une connexion Schannel.

Lorsque vous utilisez le SSP Schannel, DecryptMessage (Général) retourne SEC_I_RENEGOTIATE lorsque l’expéditeur du message souhaite renégocier la connexion (contexte de sécurité). Une application gère une renégociation demandée en appelant AcceptSecurityContext (côté serveur) ou InitializeSecurityContext (côté client) et en passant des mémoires tampons d’entrée vides. Une fois cet appel initial retourné une valeur, procédez comme si votre application créait une nouvelle connexion. Pour plus d’informations, consultez [Création d’un contexte de sécurité Schannel](creating-an-schannel-security-context.md).

Pour plus d’informations sur l’interopérabilité avec GSSAPI, consultez L’interopérabilité SSPI/Kerberos avec GSSAPI.

Spécifications

Besoin Valeur
Client minimum pris en charge
Windows XP [applications de bureau uniquement]
Serveur minimum pris en charge
Windows Server 2003 [applications de bureau uniquement]
En-tête de page
Sspi.h (inclure Security.h)
Bibliothèque
Secur32.lib
DLL
Secur32.dll

Voir aussi

Fonctions SSPI

EncryptMessage (général)

secBuffer

SecBufferDesc