Freigeben über


BCryptExportKey-Funktion (bcrypt.h)

Die BCryptExportKey--Funktion exportiert einen Schlüssel in einen Speicher BLOB-, der 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 umbrochen werden soll. Verwenden Sie diesen Parameter beim Exportieren von BLOBs vom Typ BCRYPT_AES_WRAP_KEY_BLOB; andernfalls legen Sie sie auf 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 Advanced Encryption Standard (AES)-Schlüsselumbruchalgorithmus 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 beendete 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 Eines Diffie-Hellman öffentlichen/privaten Schlüsselpaars. Der pbOutput- Puffer empfängt unmittelbar gefolgt von den Schlüsseldaten eine BCRYPT_DH_KEY_BLOB Struktur.
BCRYPT_DH_PUBLIC_BLOB
Exportieren eines Diffie-Hellman öffentlichen Schlüssels. Der pbOutput- Puffer empfängt unmittelbar gefolgt von den Schlüsseldaten eine BCRYPT_DH_KEY_BLOB Struktur.
BCRYPT_DSA_PRIVATE_BLOB
Exportieren eines DSA-Schlüsselpaars für öffentliche/private Schlüssel. Der pbOutput- Puffer empfängt eine BCRYPT_DSA_KEY_BLOB oder BCRYPT_DSA_KEY_BLOB_V2 Struktur, die unmittelbar auf die Schlüsseldaten folgt. 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: Support 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, die unmittelbar auf die Schlüsseldaten folgt. 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: Support für BCRYPT_DSA_KEY_BLOB_V2 beginnt.

BCRYPT_ECCPRIVATE_BLOB
Exportieren Sie eine elliptische Kurvenkryptografie (ECC) privaten Schlüssel. Der pbOutput- Puffer empfängt eine BCRYPT_ECCKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_ECCPUBLIC_BLOB
Exportieren sie einen öffentlichen ECC-Schlüssel. 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 Daten-BLOB. 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 spezifisch für einen einzelnen kryptografischen Dienstanbieter (CSP) ist. Undurchsichtige BLOBs können nicht übertragen werden und müssen mit demselben CSP importiert werden, der das BLOB generiert hat. Undurchsichtige BLOBs sind nur für die Verarbeitung von Schlüsselübertragungen 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 das 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 das Magic Member der BCRYPT_KEY_BLOB-Struktur bestimmt.
BCRYPT_RSAFULLPRIVATE_BLOB
Exportieren Eines vollständigen öffentlichen/privaten RSA-Schlüsselpaars. Der pbOutput- Puffer empfängt eine BCRYPT_RSAKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten. Dieses BLOB enthält zusätzliche Schlüsselmaterial im Vergleich zum BCRYPT_RSAPRIVATE_BLOB Typ.
BCRYPT_RSAPRIVATE_BLOB
Exportieren Eines ÖFFENTLICHEN/privaten RSA-Schlüsselpaars. Der pbOutput- Puffer empfängt eine BCRYPT_RSAKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten.
BCRYPT_RSAPUBLIC_BLOB
Exportieren eines öffentlichen RSA-Schlüssels. Der pbOutput- Puffer empfängt eine BCRYPT_RSAKEY_BLOB Struktur unmittelbar gefolgt von den Schlüsseldaten.
LEGACY_DH_PRIVATE_BLOB
Exportieren Sie eine ältere Diffie-Hellman Version 3 Private Key BLOB-, die ein Diffie-Hellman öffentliches/privates Schlüsselpaar enthält, das mithilfe CryptoAPIimportiert werden kann.
LEGACY_DH_PUBLIC_BLOB
Exportieren Sie eine ältere Diffie-Hellman Version 3 Public Key BLOB-, die einen Diffie-Hellman öffentlichen Schlüssel enthält, der mithilfe von CryptoAPI importiert werden kann.
LEGACY_DSA_PRIVATE_BLOB
Exportieren Sie ein öffentliches/privates DSA-Schlüsselpaar in einem Formular, 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 Version 2-Schlüssel in einem Formular, das mithilfe von CryptoAPI importiert werden kann.
LEGACY_RSAPRIVATE_BLOB
Exportieren Sie ein ÖFFENTLICHEs/privates RSA-Schlüsselpaar in einem Formular, 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 den 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 Byte in den 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-Parameter NULL-ist, platziert diese Funktion die erforderliche Größe in Byte in der ULONG-, auf die durch diesen Parameter verwiesen wird.

[in] dwFlags

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

Rückgabewert

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

Mögliche Rückgabecodes umfassen, aber nicht beschränkt auf Folgendes.

Rückgabecode Beschreibung
STATUS_SUCCESS
Die Funktion war erfolgreich.
STATUS_BUFFER_TOO_SMALL
Die durch den cbOutput Parameter angegebene Größe ist nicht groß genug, um den Chiffretext 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.

Bemerkungen

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

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

Anforderungen

Anforderung Wert
mindestens unterstützte Client- Windows Vista [Desktop-Apps | UWP-Apps]
mindestens unterstützte Server- Windows Server 2008 [Desktop-Apps | UWP-Apps]
Zielplattform- Fenster
Header- bcrypt.h
Library Bcrypt.lib
DLL- Bcrypt.dll

Siehe auch

BCryptImportKey

BCryptImportKeyPair