BCryptExportKey-Funktion (bcrypt.h)

Die BCryptExportKey-Funktion exportiert einen Schlüssel in ein Speicherblob , das zur späteren Verwendung beibehalten werden kann.

Syntax

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

Parameter

[in] hKey

Das Handle des zu exportierenden Schlüssels.

[in] hExportKey

Das Handle des Schlüssels, mit dem der exportierte Schlüssel umgebrochen werden soll. Verwenden Sie diesen Parameter beim Exportieren von BLOBs vom Typ BCRYPT_AES_WRAP_KEY_BLOB. Legen Sie andernfalls null fest.

Hinweis Das hExportKey-Handle muss vom gleichen Anbieter bereitgestellt werden, der das hKey-Handle bereitgestellt hat, und hExportKey muss ein Handle für einen symmetrischen Schlüssel sein, der im AES-Schlüsselumbruchalgorithmus ( Advanced Encryption Standard ) verwendet werden kann. Wenn das hKey-Handle vom Microsoft-Anbieter stammt, muss hExportKey ein AES-Schlüsselhandle sein.

 

Windows Server 2008 und Windows Vista: Dieser Parameter wird nicht verwendet und sollte auf NULL festgelegt werden.

[in] pszBlobType

Eine mit NULL endende Unicode-Zeichenfolge, die einen Bezeichner enthält, der den Typ des zu exportierenden BLOB angibt. Dies kann einer der folgenden Werte sein.

Wert Bedeutung
BCRYPT_AES_WRAP_KEY_BLOB
Exportieren sie einen umschlossenen AES-Schlüssel. Der Parameter hExportKey muss auf einen gültigen BCRYPT_KEY_HANDLE Zeiger auf den Schlüsselverschlüsselungsschlüssel verweisen, und der durch den hKey-Parameter dargestellte Schlüssel muss ein Vielfaches von 8 Byte lang sein.

Windows Server 2008 und Windows Vista: Dieser BLOB-Typ wird nicht unterstützt.

BCRYPT_DH_PRIVATE_BLOB
Exportieren sie ein Diffie-Hellman Paar mit öffentlichem/privatem Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_DH_KEY_BLOB-Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_DH_PUBLIC_BLOB
Exportieren sie einen Diffie-Hellman öffentlichen Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_DH_KEY_BLOB-Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_DSA_PRIVATE_BLOB
Exportieren Sie ein DSA-Paar mit öffentlichem/privatem Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_DSA_KEY_BLOB - oder BCRYPT_DSA_KEY_BLOB_V2-Struktur unmittelbar gefolgt von den Schlüsseldaten. BCRYPT_DSA_KEY_BLOB wird für Schlüssellängen von 512 bis 1024 Bit verwendet. BCRYPT_DSA_KEY_BLOB_V2 wird für Schlüssellängen verwendet, die 1024 Bit überschreiten, aber kleiner oder gleich 3072 Bit sind.

Windows 8: Die Unterstützung für BCRYPT_DSA_KEY_BLOB_V2 beginnt.

BCRYPT_DSA_PUBLIC_BLOB
Exportieren sie einen öffentlichen DSA-Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_DSA_KEY_BLOB - oder BCRYPT_DSA_KEY_BLOB_V2-Struktur unmittelbar gefolgt von den Schlüsseldaten. BCRYPT_DSA_KEY_BLOB wird für Schlüssellängen von 512 bis 1024 Bit verwendet. BCRYPT_DSA_KEY_BLOB_V2 wird für Schlüssellängen verwendet, die 1024 Bit überschreiten, aber kleiner oder gleich 3072 Bit sind.

Windows 8: Die Unterstützung für BCRYPT_DSA_KEY_BLOB_V2 beginnt.

BCRYPT_ECCPRIVATE_BLOB
Exportieren Sie einen privaten Schlüssel für die Kryptografie der Elliptic Curve (ECC). Der pbOutput-Puffer empfängt eine BCRYPT_ECCKEY_BLOB-Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_ECCPUBLIC_BLOB
Exportieren eines öffentlichen ECC-Schlüssels. Der pbOutput-Puffer empfängt eine BCRYPT_ECCKEY_BLOB-Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_KEY_DATA_BLOB
Exportieren eines symmetrischen Schlüssels in ein Datenblob. Der pbOutput-Puffer empfängt eine BCRYPT_KEY_DATA_BLOB_HEADER-Struktur unmittelbar gefolgt vom Schlüssel-BLOB.
BCRYPT_OPAQUE_KEY_BLOB
Exportieren Sie einen symmetrischen Schlüssel in einem Format, das für einen einzelnen Kryptografiedienstanbieter (CSP ) spezifisch ist. Undurchsichtige BLOBs sind nicht übertragbar und müssen mit demselben CSP importiert werden, der das BLOB generiert hat. Undurchsichtige BLOBs sind nur für die prozessübergreifende Übertragung von Schlüsseln vorgesehen und eignen sich nicht für das Beibehalten und Lesen von Versionen eines Anbieters.
BCRYPT_PUBLIC_KEY_BLOB
Exportieren Sie einen generischen öffentlichen Schlüssel eines beliebigen Typs. Der Schlüsseltyp in diesem BLOB wird durch den Magic-Member der BCRYPT_KEY_BLOB-Struktur bestimmt.
BCRYPT_PRIVATE_KEY_BLOB
Exportieren Sie einen generischen privaten Schlüssel eines beliebigen Typs. Der private Schlüssel enthält nicht unbedingt den öffentlichen Schlüssel. Der Schlüsseltyp in diesem BLOB wird durch den Magic-Member der BCRYPT_KEY_BLOB-Struktur bestimmt.
BCRYPT_RSAFULLPRIVATE_BLOB
Exportieren Sie ein vollständiges RSA-Schlüsselpaar mit öffentlichem/privatem Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_RSAKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten. Dieses BLOB enthält im Vergleich zum BCRYPT_RSAPRIVATE_BLOB-Typ zusätzliches Schlüsselmaterial.
BCRYPT_RSAPRIVATE_BLOB
Exportieren sie ein Rsa-Paar mit öffentlichem/privatem Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_RSAKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_RSAPUBLIC_BLOB
Exportieren sie einen öffentlichen RSA-Schlüssel. Der pbOutput-Puffer empfängt eine BCRYPT_RSAKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten.
LEGACY_DH_PRIVATE_BLOB
Exportieren Sie ein Älteres Diffie-Hellman Version 3 Private Key BLOB , das ein Diffie-Hellman Paar für öffentliche/private Schlüssel enthält, das mithilfe von CryptoAPI importiert werden kann.
LEGACY_DH_PUBLIC_BLOB
Exportieren Sie ein Legacy-Diffie-Hellman Version 3 Public Key BLOB , das einen Diffie-Hellman öffentlichen Schlüssel enthält, der mithilfe von CryptoAPI importiert werden kann.
LEGACY_DSA_PRIVATE_BLOB
Exportieren Sie ein DSA-Paar mit öffentlichem/privatem Schlüssel in einem Format, das mithilfe von CryptoAPI importiert werden kann.
LEGACY_DSA_PUBLIC_BLOB
Exportieren Sie einen öffentlichen DSA-Schlüssel in einem Formular, das mithilfe von CryptoAPI importiert werden kann.
LEGACY_DSA_V2_PRIVATE_BLOB
Exportieren Sie einen privaten DSA-Schlüssel der Version 2 in einer Form, die mithilfe von CryptoAPI importiert werden kann.
LEGACY_RSAPRIVATE_BLOB
Exportieren Eines öffentlichen/privaten RSA-Schlüsselpaars in einem Format, das mithilfe von CryptoAPI importiert werden kann.
LEGACY_RSAPUBLIC_BLOB
Exportieren Sie einen öffentlichen RSA-Schlüssel in einem Formular, das mithilfe von CryptoAPI importiert werden kann.

[out] pbOutput

Die Adresse eines Puffers, der das Schlüssel-BLOB empfängt. Der cbOutput-Parameter enthält die Größe dieses Puffers. Wenn dieser Parameter NULL ist, platziert diese Funktion die erforderliche Größe in Bytes in der ULONG , auf die der pcbResult-Parameter verweist.

[in] cbOutput

Enthält die Größe des pbOutput-Puffers in Bytes.

[out] pcbResult

Ein Zeiger auf eine ULONG , die die Anzahl der Bytes empfängt, die in den pbOutput-Puffer kopiert wurden. Wenn der pbOutput-ParameterNULL ist, platziert diese Funktion die erforderliche Größe in Bytes in der ULONG , auf die dieser Parameter verweist.

[in] dwFlags

Ein Satz von Flags, die das Verhalten dieser Funktion ändern. Für diese Funktion sind keine Flags definiert.

Rückgabewert

Gibt einen status Code zurück, der den Erfolg oder Fehler der Funktion angibt.

Mögliche Rückgabecodes sind u. a. die folgenden:

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Funktion war erfolgreich.
STATUS_BUFFER_TOO_SMALL
Die vom cbOutput-Parameter angegebene Größe ist nicht groß genug, um den Verschlüsselungstext zu enthalten.
STATUS_INVALID_HANDLE
Das Schlüsselhandle im hKey-Parameter ist ungültig.
STATUS_INVALID_PARAMETER
Mindestens ein Parameter ist ungültig.
STATUS_NOT_SUPPORTED
Der angegebene BLOB-Typ wird vom Anbieter nicht unterstützt.

Hinweise

Je nachdem, welche Prozessormodi ein Anbieter unterstützt, kann BCryptExportKey entweder im Benutzermodus oder im Kernelmodus aufgerufen werden. Kernelmodusaufrufer können entweder PASSIVE_LEVELIRQL oder DISPATCH_LEVEL IRQL ausführen. Wenn die aktuelle IRQL-Ebene DISPATCH_LEVEL ist, muss das im hKey-Parameter bereitgestellte Handle von einem Algorithmushandle abgeleitet werden, das von einem Anbieter zurückgegeben wird, der mit dem flag BCRYPT_PROV_DISPATCH geöffnet wurde, und alle Zeiger, die an die BCryptExportKey-Funktion übergeben werden, müssen auf nicht ausgestellten (oder gesperrten) Arbeitsspeicher verweisen.

Um diese Funktion im Kernelmodus aufzurufen, verwenden Sie Cng.lib, die Teil des Driver Development Kit (DDK) ist. Windows Server 2008 und Windows Vista: Um diese Funktion im Kernelmodus aufzurufen, verwenden Sie Ksecdd.lib.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile bcrypt.h
Bibliothek Bcrypt.lib
DLL Bcrypt.dll

Weitere Informationen

BCryptImportKey

BCryptImportKeyPair