Partager via


Fonction DecryptMessage (sspi.h)

La fonction DecryptMessage (Digest) déchiffre un message. Certains packages ne chiffrent pas et déchiffrent les messages, mais exécutent et case activée 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.

RemarqueEncryptMessage (Digest) et DecryptMessage (Digest) peuvent être appelés en même temps à partir de deux threads différents dans un seul contexte SSPI ( Security Support Provider Interface ) si un thread chiffre et l’autre déchiffre. Si plusieurs threads sont en cours de chiffrement ou si plusieurs threads sont en cours de déchiffrement, chaque thread doit obtenir un contexte unique.
 

Syntaxe

SECURITY_STATUS SEC_ENTRY DecryptMessage(
  [in]      PCtxtHandle    phContext,
  [in, out] PSecBufferDesc pMessage,
  [in]      unsigned long  MessageSeqNo,
  [out]     unsigned long  *pfQOP
);

Paramètres

[in] phContext

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

[in, out] pMessage

Pointeur vers une structure SecBufferDesc . En entrée, la structure fait référence à une ou plusieurs structures SecBuffer . Au moins l’un d’entre eux doit être de type SECBUFFER_DATA. Cette mémoire tampon contient le message chiffré. Le message chiffré est déchiffré en place, ce qui remplace le contenu d’origine de sa mémoire tampon.

Lors de l’utilisation du fournisseur de services partagé 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é.

[in] MessageSeqNo

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

Lorsque vous utilisez le fournisseur de services partagés Digest, ce paramètre doit être défini sur zéro. Le fournisseur de services partagés Digest gère la numérotation des séquences en interne.

[out] pfQOP

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

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

Valeur Signification
SECQOP_WRAP_NO_ENCRYPT
Le message n’a pas été chiffré, mais un en-tête ou une bande-annonce a été généré.
Note KERB_WRAP_NO_ENCRYPT a la même valeur et la même signification.
 
SIGN_ONLY
Lorsque vous utilisez le fournisseur de services partagés 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 retournée

Si la fonction vérifie que le message a été reçu dans l’ordre correct, 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 Description
SEC_E_BUFFER_TOO_SMALL
La mémoire tampon de message est trop petite. Utilisé avec le fournisseur de services partagé Digest.
SEC_E_CRYPTO_SYSTEM_INVALID
Le chiffrement choisi pour le contexte de sécurité n’est pas pris en charge. Utilisé avec le fournisseur de services partagé Digest.
SEC_E_INCOMPLETE_MESSAGE
Les données dans la mémoire tampon d’entrée sont incomplètes. L’application doit lire d’autres données à partir du serveur et appeler à nouveau DecryptMessage (Digest).
SEC_E_INVALID_HANDLE
Un handle de contexte non valide a été spécifié dans le paramètre phContext . Utilisé avec le fournisseur de services partagé Digest.
SEC_E_MESSAGE_ALTERED
Le message a été modifié. Utilisé avec le fournisseur de services partagé Digest.
SEC_E_OUT_OF_SEQUENCE
Le message n’a pas été reçu dans l’ordre correct.
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 fournisseur de services partagé Digest.

Remarques

Parfois, une application lit les données de la partie distante, tente de les déchiffrer à l’aide de DecryptMessage (Digest) et découvre que DecryptMessage (Digest) a réussi, mais que les mémoires tampons de sortie sont vides. Il s’agit d’un comportement normal et les applications doivent être en mesure de le gérer.

Windows XP : Cette fonction était également appelée UnsealMessage. Les applications doivent désormais utiliser DecryptMessage (Digest) uniquement.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête sspi.h (include Security.h)
Bibliothèque Secur32.lib
DLL Secur32.dll

Voir aussi

EncryptMessage (Digest)

Fonctions SSPI

SecBuffer

SecBufferDesc