Partager via


Fonction CryptDecryptMessage (wincrypt.h)

La fonction CryptDecryptMessagedécode et déchiffre un message.

Syntaxe

BOOL CryptDecryptMessage(
  [in]                PCRYPT_DECRYPT_MESSAGE_PARA pDecryptPara,
  [in]                const BYTE                  *pbEncryptedBlob,
  [in]                DWORD                       cbEncryptedBlob,
  [out, optional]     BYTE                        *pbDecrypted,
  [in, out, optional] DWORD                       *pcbDecrypted,
  [out, optional]     PCCERT_CONTEXT              *ppXchgCert
);

Paramètres

[in] pDecryptPara

Pointeur vers une structure CRYPT_DECRYPT_MESSAGE_PARA qui contient des paramètres de déchiffrement.

[in] pbEncryptedBlob

Pointeur vers une mémoire tampon qui contient le message encodé et chiffré à déchiffrer.

[in] cbEncryptedBlob

Taille, en octets, du message encodé et chiffré.

[out, optional] pbDecrypted

Pointeur vers une mémoire tampon qui reçoit le message déchiffré.

Pour définir la taille de ces informations à des fins d’allocation de mémoire, ce paramètre peut avoir la valeur NULL. Un message déchiffré n’est pas retourné si ce paramètre a la valeur NULL. Pour plus d’informations, consultez Récupération de données de longueur inconnue.

[in, out, optional] pcbDecrypted

Pointeur vers un DWORD qui spécifie la taille, en octets, de la mémoire tampon pointée vers le paramètre pbDecrypted . Lorsque la fonction retourne, cette variable contient la taille, en octets, du message déchiffré copié dans pbDecrypted.

Note Lors du traitement des données retournées dans la mémoire tampon pbDecrypted , les applications doivent utiliser la taille réelle des données retournées. La taille réelle peut être légèrement inférieure à la taille de la mémoire tampon spécifiée dans pcbDecrypted en entrée. En entrée, les tailles de mémoire tampon sont généralement spécifiées suffisamment grandes pour garantir que les données de sortie les plus volumineuses possibles s’intègrent dans la mémoire tampon. À la sortie, le DWORD est mis à jour à la taille réelle des données copiées dans la mémoire tampon.
 

[out, optional] ppXchgCert

Un pointeur vers une structure de CERT_CONTEXT d’un certificat qui correspond à la clé d’échange privée nécessaire pour déchiffrer le message. Pour indiquer que la fonction ne doit pas retourner le contexte de certificat utilisé pour le déchiffrement, définissez ce paramètre sur NULL.

Valeur retournée

Si la fonction réussit, la fonction retourne une valeur différente de zéro (TRUE).

Si la fonction échoue, elle retourne zéro (FALSE). Pour obtenir des informations d’erreur étendues, appelez GetLastError.

Note Les erreurs des appels à CryptImportKey et CryptDecrypt peuvent être propagées à cette fonction.
 
La fonction GetLastError retourne le plus souvent les codes d’erreur suivants.
Code de retour Description
ERROR_MORE_DATA
Si la mémoire tampon spécifiée par le paramètre pbDecrypted n’est pas assez grande pour contenir les données retournées, la fonction définit le code ERROR_MORE_DATA et stocke la taille de mémoire tampon requise, en octets, dans la variable pointée par pcbDecrypted.
E_INVALIDARG
Types d’encodage de message et de certificat non valides. Actuellement, seuls les PKCS_7_ASN_ENCODING et les X509_ASN_ENCODING_TYPE sont pris en charge. CbSize non valide dans *pDecryptPara.
CRYPT_E_UNEXPECTED_MSG_TYPE
Pas un message de chiffrement enveloppe.
NTE_BAD_ALGID
Le message a été chiffré à l’aide d’un algorithme inconnu ou non pris en charge.
CRYPT_E_NO_DECRYPT_CERT
Aucun certificat n’a été trouvé disposant d’une propriété de clé privée à utiliser pour le déchiffrement.
 

Si la fonction échoue, GetLastError peut renvoyer une erreur d’encodage/décodage asN.1 ( Abstract Syntax Notation One ). Pour plus d’informations sur ces erreurs, consultez Valeurs de retour d’encodage/décodage ASN.1.

Remarques

Lorsque null est passé pour pbDecrypted et que pcbDecrypted n’est pas NULL, NULL est retourné pour l’adresse passée dans ppXchgCert ; sinon, un pointeur vers un CERT_CONTEXT est retourné. Pour un message correctement déchiffré, ce pointeur vers un CERT_CONTEXT pointe vers le contexte de certificat utilisé pour déchiffrer le message. Il doit être libéré en appelant CertFreeCertificateContext. Si la fonction échoue, la valeur à ppXchgCert est définie sur NULL.

Exemples

Pour obtenir un exemple qui utilise cette fonction, consultez Exemple de programme C : utilisation de CryptEncryptMessage et CryptDecryptMessage.

Configuration requise

   
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 wincrypt.h
Bibliothèque Crypt32.lib
DLL Crypt32.dll

Voir aussi

CryptDecryptAndVerifyMessageSignature

Fonctions de message simplifiées