Funzione BCryptExportKey (bcrypt.h)

La funzione BCryptExportKey esporta una chiave in un BLOB di memoria che può essere salvato in modo permanente per un uso successivo.

Sintassi

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
);

Parametri

[in] hKey

Handle della chiave da esportare.

[in] hExportKey

Handle della chiave con cui eseguire il wrapping della chiave esportata. Utilizzare questo parametro durante l'esportazione di BLOB di tipo BCRYPT_AES_WRAP_KEY_BLOB; in caso contrario, impostarlo su NULL.

Nota L'handle hExportKey deve essere fornito dallo stesso provider che ha fornito l'handle hKey e hExportKey deve essere un handle per una chiave simmetrica che può essere usata nell'algoritmo di wrapping della chiave AES (Advanced Encryption Standard ). Quando l'handle hKey proviene dal provider Microsoft, hExportKey deve essere un handle di chiave AES.

 

Windows Server 2008 e Windows Vista: Questo parametro non viene usato e deve essere impostato su NULL.

[in] pszBlobType

Stringa Unicode con terminazione Null contenente un identificatore che specifica il tipo di BLOB da esportare. Può trattarsi di uno dei valori seguenti.

Valore Significato
BCRYPT_AES_WRAP_KEY_BLOB
Esportare una chiave AES di cui è stato eseguito il wrapping. Il parametro hExportKey deve fare riferimento a un puntatore BCRYPT_KEY_HANDLE valido alla chiave di crittografia della chiave e la chiave rappresentata dal parametro hKey deve essere un multiplo di 8 byte di lunghezza.

Windows Server 2008 e Windows Vista: Questo tipo di BLOB non è supportato.

BCRYPT_DH_PRIVATE_BLOB
Esportare una coppia di chiavi pubblica/privata Diffie-Hellman. Il buffer pbOutput riceve una struttura BCRYPT_DH_KEY_BLOB immediatamente seguita dai dati chiave.
BCRYPT_DH_PUBLIC_BLOB
Esportare una chiave pubblica Diffie-Hellman. Il buffer pbOutput riceve una struttura BCRYPT_DH_KEY_BLOB immediatamente seguita dai dati chiave.
BCRYPT_DSA_PRIVATE_BLOB
Esportare una coppia di chiavi pubblica/privata DSA. Il buffer pbOutput riceve una struttura BCRYPT_DSA_KEY_BLOB o BCRYPT_DSA_KEY_BLOB_V2 immediatamente seguita dai dati chiave. BCRYPT_DSA_KEY_BLOB viene usato per le lunghezze di chiave da 512 a 1024 bit. BCRYPT_DSA_KEY_BLOB_V2 viene usato per le lunghezze di chiave che superano i 1024 bit, ma sono minori o uguali a 3072 bit.

Windows 8: inizia il supporto per BCRYPT_DSA_KEY_BLOB_V2.

BCRYPT_DSA_PUBLIC_BLOB
Esportare una chiave pubblica DSA. Il buffer pbOutput riceve una struttura BCRYPT_DSA_KEY_BLOB o BCRYPT_DSA_KEY_BLOB_V2 immediatamente seguita dai dati chiave. BCRYPT_DSA_KEY_BLOB viene usato per le lunghezze di chiave da 512 a 1024 bit. BCRYPT_DSA_KEY_BLOB_V2 viene usato per le lunghezze di chiave che superano i 1024 bit, ma sono minori o uguali a 3072 bit.

Windows 8: inizia il supporto per BCRYPT_DSA_KEY_BLOB_V2.

BCRYPT_ECCPRIVATE_BLOB
Esportare una chiave privata ecc (elliptic curve cryptography). Il buffer pbOutput riceve una struttura BCRYPT_ECCKEY_BLOB immediatamente seguita dai dati chiave.
BCRYPT_ECCPUBLIC_BLOB
Esportare una chiave pubblica ECC. Il buffer pbOutput riceve una struttura BCRYPT_ECCKEY_BLOB immediatamente seguita dai dati chiave.
BCRYPT_KEY_DATA_BLOB
Esportare una chiave simmetrica in un BLOB di dati. Il buffer pbOutput riceve una struttura BCRYPT_KEY_DATA_BLOB_HEADER immediatamente seguita dal BLOB della chiave.
BCRYPT_OPAQUE_KEY_BLOB
Esportare una chiave simmetrica in un formato specifico per un singolo provider di servizi di crittografia (CSP). I BLOB opachi non sono trasferibili e devono essere importati usando lo stesso CSP che ha generato il BLOB. I BLOB opachi devono essere usati solo per il trasferimento interprocesso delle chiavi e non sono adatti per essere salvati in modo permanente e letti tra versioni di un provider.
BCRYPT_PUBLIC_KEY_BLOB
Esportare una chiave pubblica generica di qualsiasi tipo. Il tipo di chiave in questo BLOB è determinato dal membro Magic della struttura BCRYPT_KEY_BLOB .
BCRYPT_PRIVATE_KEY_BLOB
Esportare una chiave privata generica di qualsiasi tipo. La chiave privata non contiene necessariamente la chiave pubblica. Il tipo di chiave in questo BLOB è determinato dal membro Magic della struttura BCRYPT_KEY_BLOB .
BCRYPT_RSAFULLPRIVATE_BLOB
Esportare una coppia di chiavi pubblica/privata RSA completa. Il buffer pbOutput riceve una struttura BCRYPT_RSAKEY_BLOB immediatamente seguita dai dati chiave. Questo BLOB includerà materiale aggiuntivo della chiave rispetto al tipo di BCRYPT_RSAPRIVATE_BLOB .
BCRYPT_RSAPRIVATE_BLOB
Esportare una coppia di chiavi pubblica/privata RSA. Il buffer pbOutput riceve una struttura BCRYPT_RSAKEY_BLOB immediatamente seguita dai dati chiave.
BCRYPT_RSAPUBLIC_BLOB
Esportare una chiave pubblica RSA. Il buffer pbOutput riceve una struttura BCRYPT_RSAKEY_BLOB immediatamente seguita dai dati chiave.
LEGACY_DH_PRIVATE_BLOB
Esportare un BLOB di chiave privata Diffie-Hellman versione 3 legacy che contiene una coppia di chiavi pubblica/privata Diffie-Hellman che può essere importata tramite CryptoAPI.
LEGACY_DH_PUBLIC_BLOB
Esportare un BLOB di chiave pubblica Diffie-Hellman versione 3 legacy che contiene una chiave pubblica Diffie-Hellman che può essere importata tramite CryptoAPI.
LEGACY_DSA_PRIVATE_BLOB
Esportare una coppia di chiavi pubblica/privata DSA in un formato che può essere importato tramite CryptoAPI.
LEGACY_DSA_PUBLIC_BLOB
Esportare una chiave pubblica DSA in un modulo che può essere importato tramite CryptoAPI.
LEGACY_DSA_V2_PRIVATE_BLOB
Esportare una chiave privata DSA versione 2 in un modulo che può essere importato tramite CryptoAPI.
LEGACY_RSAPRIVATE_BLOB
Esportare una coppia di chiavi pubblica/privata RSA in un modulo che può essere importato tramite CryptoAPI.
LEGACY_RSAPUBLIC_BLOB
Esportare una chiave pubblica RSA in un formato che può essere importato tramite CryptoAPI.

[out] pbOutput

Indirizzo di un buffer che riceve il BLOB della chiave. Il parametro cbOutput contiene le dimensioni di questo buffer. Se questo parametro è NULL, questa funzione inserisce le dimensioni richieste, in byte, in ULONG a cui punta il parametro pcbResult .

[in] cbOutput

Contiene le dimensioni, in byte, del buffer pbOutput .

[out] pcbResult

Puntatore a un ULONG che riceve il numero di byte copiati nel buffer pbOutput . Se il parametro pbOutput è NULL, questa funzione inserisce le dimensioni richieste, in byte, in ULONG a cui punta questo parametro.

[in] dwFlags

Set di flag che modificano il comportamento di questa funzione. Non sono definiti flag per questa funzione.

Valore restituito

Restituisce un codice di stato che indica l'esito positivo o negativo della funzione.

I codici restituiti possibili includono, a titolo esemplificativo, quanto segue.

Codice restituito Descrizione
STATUS_SUCCESS
La funzione ha avuto esito positivo.
STATUS_BUFFER_TOO_SMALL
Le dimensioni specificate dal parametro cbOutput non sono sufficienti per contenere il testo crittografato.
STATUS_INVALID_HANDLE
L'handle della chiave nel parametro hKey non è valido.
STATUS_INVALID_PARAMETER
Uno o più parametri non sono validi.
STATUS_NOT_SUPPORTED
Il tipo BLOB specificato non è supportato dal provider.

Commenti

A seconda delle modalità di processore supportate da un provider, È possibile chiamare BCryptExportKey dalla modalità utente o dalla modalità kernel. I chiamanti in modalità kernel possono essere eseguiti in PASSIVE_LEVELIRQL o DISPATCH_LEVEL IRQL. Se il livello IRQL corrente è DISPATCH_LEVEL, l'handle fornito nel parametro hKey deve essere derivato da un handle di algoritmo restituito da un provider aperto con il flag BCRYPT_PROV_DISPATCH e tutti i puntatori passati alla funzione BCryptExportKey devono fare riferimento a memoria non di pagina (o bloccata).

Per chiamare questa funzione in modalità kernel, usare Cng.lib, che fa parte del Driver Development Kit (DDK). Windows Server 2008 e Windows Vista: Per chiamare questa funzione in modalità kernel, usare Ksecdd.lib.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione bcrypt.h
Libreria Bcrypt.lib
DLL Bcrypt.dll

Vedi anche

BCryptImportKey

BCryptImportKeyPair