Partager via


BCryptExportKey, fonction (bcrypt.h)

La fonction BCryptExportKey exporte une clé vers un objet BLOB de mémoire qui peut être conservé pour une utilisation ultérieure.

Syntaxe

NTSTATUS BCryptExportKey(
  [in]  BCRYPT_KEY_HANDLE hKey,
  [in]  BCRYPT_KEY_HANDLE hExportKey,
  [in]  LPCWSTR           pszBlobType,
  [out] PUCHAR            pbOutput,
  [in]  ULONG             cbOutput,
  [out] ULONG             *pcbResult,
  [in]  ULONG             dwFlags
);

Paramètres

[in] hKey

Handle de la clé à exporter.

[in] hExportKey

Handle de la clé avec laquelle encapsuler la clé exportée. Utilisez ce paramètre lors de l’exportation des objets blob de type BCRYPT_AES_WRAP_KEY_BLOB ; sinon, définissez-le sur NULL.

Remarque

 Le handle hExportKey doit être fourni par le même fournisseur que celui qui a fourni le handle hKey , et hExportKey doit être un handle vers une clé symétrique qui peut être utilisée dans l’algorithme de wrap de clé AES (Advanced Encryption Standard ). Lorsque le handle hKey provient du fournisseur Microsoft, hExportKey doit être un handle de clé AES.

Windows Server 2008 et Windows Vista : Ce paramètre n’est pas utilisé et doit être défini sur NULL.

[in] pszBlobType

Chaîne Unicode terminée par null qui contient un identificateur qui spécifie le type d’objet BLOB à exporter. Il peut s’agir de l’une des valeurs suivantes.

Valeur Signification
BCRYPT_AES_WRAP_KEY_BLOB Exportez une clé AES encapsulée. Le paramètre hExportKey doit référencer un pointeur BCRYPT_KEY_HANDLE valide à la clé de chiffrement de clé, et la clé représentée par le paramètre hKey doit être un multiple de 8 octets de long.

Windows Server 2008 et Windows Vista : Ce type d’objet BLOB n’est pas pris en charge.
BCRYPT_DH_PRIVATE_BLOB Exportez une paire de clés publique/privée Diffie-Hellman. La mémoire tampon pbOutput reçoit une structure BCRYPT_DH_KEY_BLOB immédiatement suivie des données clés.
BCRYPT_DH_PUBLIC_BLOB Exportez une clé publique Diffie-Hellman. La mémoire tampon pbOutput reçoit une structure BCRYPT_DH_KEY_BLOB immédiatement suivie des données clés.
BCRYPT_DSA_PRIVATE_BLOB Exportez une paire de clés publique/privée DSA. La mémoire tampon pbOutput reçoit une structure BCRYPT_DSA_KEY_BLOB ou BCRYPT_DSA_KEY_BLOB_V2 immédiatement suivie des données clés. BCRYPT_DSA_KEY_BLOB est utilisé pour les longueurs de clé comprises entre 512 et 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 est utilisé pour les longueurs de clé qui dépassent 1024 bits, mais sont inférieures ou égales à 3072 bits.

Windows 8 : La prise en charge de BCRYPT_DSA_KEY_BLOB_V2 commence.
BCRYPT_DSA_PUBLIC_BLOB Exportez une clé publique DSA. La mémoire tampon pbOutput reçoit une structure BCRYPT_DSA_KEY_BLOB ou BCRYPT_DSA_KEY_BLOB_V2 immédiatement suivie des données clés. BCRYPT_DSA_KEY_BLOB est utilisé pour les longueurs de clé comprises entre 512 et 1024 bits. BCRYPT_DSA_KEY_BLOB_V2 est utilisé pour les longueurs de clé qui dépassent 1024 bits, mais sont inférieures ou égales à 3072 bits.

Windows 8 : La prise en charge de BCRYPT_DSA_KEY_BLOB_V2 commence.
BCRYPT_ECCPRIVATE_BLOB Exportez une clé privéeECC (Elliptic Curve Cryptography). La mémoire tampon pbOutput reçoit une structure BCRYPT_ECCKEY_BLOB immédiatement suivie des données clés.
BCRYPT_ECCPUBLIC_BLOB Exportez une clé publique ECC. La mémoire tampon pbOutput reçoit une structure BCRYPT_ECCKEY_BLOB immédiatement suivie des données clés.
BCRYPT_KEY_DATA_BLOB Exportez une clé symétrique vers un objet BLOB de données. La mémoire tampon pbOutput reçoit une structure BCRYPT_KEY_DATA_BLOB_HEADER immédiatement suivie du blob de clés.
BCRYPT_MLKEM_PRIVATE_SEED_BLOB Exportez une clé de départ privée ML-KEM. La mémoire tampon pbOutput reçoit une structure BCRYPT_MLKEM_KEY_BLOB immédiatement suivie du jeu de paramètres et des données de clé.

Remarque : ML-KEM handles de clé qui contiennent une clé privée qui a été importée à l’aide de BCRYPT_MLKEM_PRIVATE_BLOB disposent d’informations insuffisantes pour exporter une clé initiale privée.

Windows Insiders (build 27843) : La prise en charge de ML-KEM commence.
BCRYPT_MLKEM_PRIVATE_BLOB Exportez une clé privée (decapsulation) ML-KEM. La mémoire tampon pbOutput reçoit une structure BCRYPT_MLKEM_KEY_BLOB immédiatement suivie du jeu de paramètres et des données de clé.

Windows Insiders (build 27843) : La prise en charge de ML-KEM commence.
BCRYPT_MLKEM_PUBLIC_BLOB Exportez une clé publique (encapsulation) ML-KEM. La mémoire tampon pbOutput reçoit une structure BCRYPT_MLKEM_KEY_BLOB immédiatement suivie du jeu de paramètres et des données de clé.

Windows Insiders (build 27843) : La prise en charge de ML-KEM commence.
BCRYPT_OPAQUE_KEY_BLOB Exportez une clé symétrique dans un format spécifique à un fournisseur de services de chiffrement (CSP). Les objets blob opaques ne sont pas transférables et doivent être importés à l’aide du même csp que celui qui a généré l’objet BLOB. Les objets blob opaques sont uniquement destinés à être utilisés pour le transfert interprocesseur de clés et ne conviennent pas pour être conservés et lus entre les versions d’un fournisseur.
BCRYPT_PQDSA_PRIVATE_SEED_BLOB Exportez une clé initiale privée PQDSA (Post-Quantum Digital Signature Algorithm). La mémoire tampon pbOutput reçoit une structure BCRYPT_PQDSA_KEY_BLOB immédiatement suivie du jeu de paramètres et des données de clé.

Note: Les handles de clé PQDSA qui contiennent une clé privée qui a été importée à l’aide de BCRYPT_PQDSA_PRIVATE_BLOB ont des informations insuffisantes pour exporter une clé initiale privée.

Windows Insiders (build 27843) : La prise en charge de ML-DSA commence.
BCRYPT_PQDSA_PRIVATE_BLOB Exportez une clé privée PQDSA. La mémoire tampon pbOutput reçoit une structure BCRYPT_PQDSA_KEY_BLOB immédiatement suivie du jeu de paramètres et des données de clé.

Windows Insiders (build 27843) : La prise en charge de ML-DSA commence.
BCRYPT_PQDSA_PUBLIC_BLOB Exportez une clé publique PQDSA. La mémoire tampon pbOutput reçoit une structure BCRYPT_PQDSA_KEY_BLOB immédiatement suivie du jeu de paramètres et des données de clé.

Windows Insiders (build 27843) : La prise en charge de ML-DSA commence.
BCRYPT_PRIVATE_KEY_BLOB Exportez une clé privée générique de n’importe quel type. La clé privée ne contient pas nécessairement la clé publique. Le type de clé dans cet objet BLOB est déterminé par le membre Magic de la structure BCRYPT_KEY_BLOB .
BCRYPT_PUBLIC_KEY_BLOB Exportez une clé publique générique de n’importe quel type. Le type de clé dans cet objet BLOB est déterminé par le membre Magic de la structure BCRYPT_KEY_BLOB .
BCRYPT_RSAFULLPRIVATE_BLOB Exportez une paire de clés publique/privée RSA complète. La mémoire tampon pbOutput reçoit une structure BCRYPT_RSAKEY_BLOB immédiatement suivie des données clés. Cet objet BLOB inclut des éléments clés supplémentaires par rapport au type de BCRYPT_RSAPRIVATE_BLOB .
BCRYPT_RSAPRIVATE_BLOB Exportez une paire de clés publique/privée RSA. La mémoire tampon pbOutput reçoit une structure BCRYPT_RSAKEY_BLOB immédiatement suivie des données clés.
BCRYPT_RSAPUBLIC_BLOB Exportez une clé publique RSA. La mémoire tampon pbOutput reçoit une structure BCRYPT_RSAKEY_BLOB immédiatement suivie des données clés.
LEGACY_DH_PRIVATE_BLOB Exportez un objet BLOB de clé privéeDiffie-Hellman version 3 héritée qui contient une paire de clés publique/privée Diffie-Hellman qui peut être importée à l’aide de CryptoAPI.
LEGACY_DH_PUBLIC_BLOB Exportez un objet BLOB de clé publique héritéeDiffie-Hellman version 3 qui contient une clé publique Diffie-Hellman qui peut être importée à l’aide de CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB Exportez une paire de clés publique/privée DSA dans un formulaire qui peut être importé à l’aide de CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB Exportez une clé publique DSA dans un formulaire qui peut être importé à l’aide de CryptoAPI.
LEGACY_DSA_V2_PRIVATE_BLOB Exportez une clé privée DSA version 2 dans un formulaire qui peut être importé à l’aide de CryptoAPI.
LEGACY_RSAPRIVATE_BLOB Exportez une paire de clés publique/privée RSA dans un formulaire qui peut être importé à l’aide de CryptoAPI.
LEGACY_RSAPUBLIC_BLOB Exportez une clé publique RSA dans un formulaire qui peut être importé à l’aide de CryptoAPI.

[out] pbOutput

Adresse d’une mémoire tampon qui reçoit l’objet BLOB de clé. Le paramètre cbOutput contient la taille de cette mémoire tampon. Si ce paramètre est NULL, cette fonction place la taille requise, en octets, dans l’ULONG pointé par le paramètre cciResult .

[in] cbOutput

Contient la taille, en octets, de la mémoire tampon pbOutput .

[out] pcbResult

Pointeur vers un ULONG qui reçoit le nombre d’octets qui ont été copiés dans la mémoire tampon pbOutput . Si le paramètre pbOutput est NULL, cette fonction place la taille requise, en octets, dans l’ULONG pointé par ce paramètre.

[in] dwFlags

Ensemble d’indicateurs qui modifient le comportement de cette fonction. Aucun indicateur n’est défini pour cette fonction.

Valeur de retour

Retourne un code d’état qui indique la réussite ou l’échec de la fonction.

Les codes de retour possibles incluent, mais ne sont pas limités à, les éléments suivants.

Retourner le code Descriptif
STATUS_SUCCESS La fonction a réussi.
STATUS_BUFFER_TOO_SMALL La taille spécifiée par le paramètre cbOutput n’est pas suffisamment grande pour contenir le texte chiffré. Si le pbOutput de mémoire tampon est trop petit, le pbOutput reçoit le nombre d’octets requis pour pbOutput.
STATUS_INVALID_HANDLE Le handle de clé dans le paramètre hKey n’est pas valide.
STATUS_INVALID_PARAMETER Un ou plusieurs paramètres ne sont pas valides.
STATUS_NOT_SUPPORTED Le type BLOB spécifié n’est pas pris en charge par le fournisseur. Si le handle de clé fourni ne prend pas en charge l’exportation de la valeur initiale privée. Voir les remarques.

Remarques

Lorsque vous utilisez un fournisseur d’algorithmes pris en charge, BCryptExportKey peut être appelé en mode utilisateur ou en mode noyau. Les appelants en mode noyau peuvent s’exécuter à PASSIVE_LEVELIRQL ou DISPATCH_LEVEL IRQL. Si le niveau IRQL actuel est DISPATCH_LEVEL, le handle fourni dans le paramètre hKey doit être dérivé d’un handle d’algorithme retourné par un fournisseur ouvert avec l’indicateur BCRYPT_PROV_DISPATCH , et tous les pointeurs passés à la fonction BCryptExportKey doivent faire référence à la mémoire non paginé (ou verrouillée).

Pour appeler cette fonction en mode noyau, utilisez Cng.lib, qui fait partie du Kit de développement de pilotes (DDK). Windows Server 2008 et Windows Vista : Pour appeler cette fonction en mode noyau, utilisez Ksecdd.lib.

Exigences

Exigence Valeur
Client minimum requis Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau | Applications UWP]
plateforme cible Fenêtres
En-tête bcrypt.h
Bibliothèque Bcrypt.lib
DLL Bcrypt.dll

Voir aussi

BCryptImportKey

BCryptImportKeyPair