Partager via


Fonction EncryptMessage (Schannel)

La fonction EncryptMessage (Schannel) chiffre un message pour assurer la confidentialité. EncryptMessage (Schannel) permet à une application de choisir parmi les algorithmes de chiffrement pris en charge par le mécanisme choisi. La fonction EncryptMessage (Schannel) utilise le contexte de sécurité référencé par le handle de contexte. Certains packages n’ont pas de messages à chiffrer ou à déchiffrer, mais fournissent plutôt un hachage d’intégrité qui peut être vérifié.

Lors de l’utilisation du fournisseur SSP Schannel, cette fonction chiffre les messages à l’aide d’une clé de session négociée avec la partie distante qui recevra le message. L’algorithme de chiffrement est déterminé par la [suite de chiffrement ](chiffrement-suites-in-schannel.md) en cours d’utilisation.

Notes

EncryptMessage (Schannel) et DecryptMessage (Schannel) 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 que 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 EncryptMessage(
  _In_    PCtxtHandle    phContext,
  _In_    ULONG          fQOP,
  _Inout_ PSecBufferDesc pMessage,
  _In_    ULONG          MessageSeqNo
);

Paramètres

phContext [in]

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

fQOP [in]

Indicateurs spécifiques au package qui indiquent la qualité de la protection. Un package de sécurité peut utiliser ce paramètre pour permettre la sélection d’algorithmes de chiffrement.

Ce paramètre peut être l’indicateur suivant.

Valeur Signification
SECQOP_WRAP_OOB_DATA
Envoyer un message d’alerte Schannel. Dans ce cas, le paramètre pMessage doit contenir un code d’événement SSL/TLS standard de deux octets. Cette valeur est prise en charge uniquement par le fournisseur de services Schannel.
Par exemple, à compter de Windows Vista, le message « server hello » envoyé par le serveur pendant le protocole de réauthentification doit être chiffré en tant qu’alerte TLS.

pMessage [in, out]

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

La fonction ne traite pas les mémoires tampons avec l’attribut SECBUFFER_READONLY.

La longueur de la structure SecBuffer qui contient le message ne doit pas être supérieure à cbMaximumMessage, obtenue à partir de la fonction QueryContextAttributes (Schannel) (SECPKG_ATTR_STREAM_SIZES).

MessageSeqNo [in]

Numéro de séquence que l’application de transport a attribué au message. Si l’application de transport ne gère pas de numéros de séquence, ce paramètre doit être égal à zéro.

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

Valeur retournée

Si la fonction réussit, la fonction retourne SEC_E_OK.

Si la fonction échoue, elle retourne l’un des codes d’erreur suivants.

Code de retour Description
SEC_E_BUFFER_TOO_SMALL
La mémoire tampon de sortie est trop petite. Pour plus d'informations, consultez la section Notes.
SEC_E_CONTEXT_EXPIRED
L’application référence un contexte qui a déjà été fermé. Une application correctement écrite ne doit pas recevoir cette erreur.
SEC_E_CRYPTO_SYSTEM_INVALID
Le chiffrement choisi pour le contexte de sécurité n’est pas pris en charge.
SEC_E_INSUFFICIENT_MEMORY
La mémoire disponible est insuffisante pour effectuer l’action demandée.
SEC_E_INVALID_HANDLE
Un handle de contexte non valide a été spécifié dans le paramètre phContext .
SEC_E_INVALID_TOKEN
Aucune mémoire tampon de type SECBUFFER_DATA n’a été trouvée.
SEC_E_QOP_NOT_SUPPORTED
Ni la confidentialité ni l’intégrité ne sont prises en charge par le contexte de sécurité.

Notes

La fonction EncryptMessage (Schannel) chiffre un message en fonction du message et de la clé de session à partir d’un contexte de sécurité.

Si l’application de transport a créé le contexte de sécurité pour prendre en charge la détection de séquence et que l’appelant fournit un numéro de séquence, la fonction inclut ces informations avec le message chiffré. L’inclusion de ces informations protège contre la relecture, l’insertion et la suppression de messages. Le package de sécurité incorpore le numéro de séquence transmis à partir de l’application de transport.

Lorsqu’il est utilisé avec le fournisseur de services SSP Schannel, le paramètre pMessage doit contenir une structure SecBufferDesc avec les mémoires tampons suivantes.

Notes

Ces mémoires tampons doivent être fournies dans l’ordre indiqué.

Type de mémoire tampon Description
SECBUFFER_STREAM_HEADER Utilisé en interne. Aucune initialisation requise.
SECBUFFER_DATA Contient le message en texte clair à chiffrer.
SECBUFFER_STREAM_TRAILER Utilisé en interne. Aucune initialisation requise.
SECBUFFER_EMPTY Utilisé en interne. Aucune initialisation requise. La taille peut être égale à zéro.

Lorsque vous utilisez le fournisseur SSP Schannel, déterminez la taille maximale de chacune des mémoires tampons en appelant la fonction QueryContextAttributes (Schannel) et en spécifiant l’attribut SECPKG_ATTR_STREAM_SIZES. Cette fonction retourne une structure SecPkgContext_StreamSizes dont les membres contiennent les tailles maximales pour les mémoires tampons d’en-tête (membre cbHeader ), de message (membre cbMaximumMessage ) et de bande-annonce (membre cbTrailer ).

Pour des performances optimales, les structures pMessage doivent être allouées à partir de la mémoire contiguë.

Windows XP/2000 : Cette fonction était également appelée SealMessage. Les applications doivent désormais utiliser EncryptMessage (Schannel) uniquement.

Spécifications

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