Partager via


Fonction DecryptMessage (Digest)

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é (SSP) Digest fournit la confidentialité du chiffrement et du déchiffrement pour les messages échangés entre le client et le serveur en tant que mécanisme SASL uniquement.

Notes

EncryptMessage (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 est en cours de chiffrement et l’autre est en cours de déchiffrement. 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(
  PCtxtHandle    phContext,
  PSecBufferDesc pMessage,
  unsigned long  MessageSeqNo,
  unsigned long  *pfQOP
);

Paramètres

phContext [in]

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

pMessage [in, out]

Pointeur vers une structure SecBufferDesc . Lors de l’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é sur place, remplaçant le contenu d’origine de sa mémoire tampon.

Lors de l’utilisation du fournisseur de services partagés Digest, en entrée, la structure référence une ou plusieurs structures SecBuffer . L’une d’elles doit être de type SECBUFFER_DATA ou SECBUFFER_STREAM, et elle doit contenir le message chiffré.

MessageSeqNo [in]

Numéro de séquence attendu par l’application de transport, le cas échéant. Si l’application de transport ne gère pas les 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 SSP Digest gère la numérotation des séquences en interne.

pfQOP [out]

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 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 Description
SEC_E_BUFFER_TOO_SMALL La mémoire tampon des messages est trop petite. Utilisé avec le fournisseur de services partagés 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és Digest.
SEC_E_INCOMPLETE_MESSAGE Les données de la mémoire tampon d’entrée sont incomplètes. L’application doit lire plus de données à partir du serveur et appeler de 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és Digest.
SEC_E_MESSAGE_ALTERED Le message a été modifié. Utilisé avec le fournisseur de services partagés 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és 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 maintenant 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]
En-tête Sspi.h (include Security.h)
Bibliothèque Secur32.lib
DLL Secur32.dll

Voir aussi