BCryptDecrypt-Funktion (bcrypt.h)
Die Funktion BCryptDecrypt entschlüsselt einen Datenblock.
Syntax
NTSTATUS BCryptDecrypt(
[in, out] BCRYPT_KEY_HANDLE hKey,
[in] PUCHAR pbInput,
[in] ULONG cbInput,
[in, optional] VOID *pPaddingInfo,
[in, out, optional] PUCHAR pbIV,
[in] ULONG cbIV,
[out, optional] PUCHAR pbOutput,
[in] ULONG cbOutput,
[out] ULONG *pcbResult,
[in] ULONG dwFlags
);
Parameter
[in, out] hKey
Das Handle des Schlüssels, der zum Entschlüsseln der Daten verwendet werden soll. Dieses Handle wird von einer der Schlüsselerstellungsfunktionen abgerufen, z. BCryptGenerateSymmetricKey, BCryptGenerateKeyPair oder BCryptImportKey.
[in] pbInput
Die Adresse eines Puffers, der den zu entschlüsselnden Verschlüsselungstext enthält. Der cbInput-Parameter enthält die Größe des zu entschlüsselnden Verschlüsselungstexts. Weitere Informationen finden Sie in den Hinweisen.
[in] cbInput
Die Anzahl der zu entschlüsselnden Bytes im pbInput-Puffer .
[in, optional] pPaddingInfo
Ein Zeiger auf eine Struktur, die Abstandsinformationen enthält. Dieser Parameter wird nur mit asymmetrischen Schlüsseln und authentifizierten Verschlüsselungsmodi verwendet. Wenn ein authentifizierter Verschlüsselungsmodus verwendet wird, muss dieser Parameter auf eine BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO-Struktur verweisen. Wenn asymmetrische Schlüssel verwendet werden, wird der Strukturtyp, auf den dieser Parameter verweist, durch den Wert des dwFlags-Parameters bestimmt. Andernfalls muss der Parameter auf NULL festgelegt werden.
[in, out, optional] pbIV
Die Adresse eines Puffers, der den Initialisierungsvektor (IV) enthält, der während der Entschlüsselung verwendet werden soll. Der cbIV-Parameter enthält die Größe dieses Puffers. Diese Funktion ändert den Inhalt dieses Puffers. Wenn Sie den IV später wiederverwenden müssen, stellen Sie sicher, dass Sie eine Kopie dieses Puffers erstellen, bevor Sie diese Funktion aufrufen.
Dieser Parameter ist optional und kann NULL sein, wenn kein IV verwendet wird.
Die erforderliche Größe des IV kann durch Aufrufen der BCryptGetProperty-Funktion abgerufen werden, um die BCRYPT_BLOCK_LENGTH-Eigenschaft abzurufen. Dadurch wird die Größe eines Blocks für den Algorithmus bereitgestellt, der auch die Größe des IV entspricht.
[in] cbIV
Die Größe des pbIV-Puffers in Bytes.
[out, optional] pbOutput
Die Adresse eines Puffers, der den von dieser Funktion erzeugten Klartext empfangen soll. Der cbOutput-Parameter enthält die Größe dieses Puffers. Weitere Informationen finden Sie in den Hinweisen.
Wenn dieser Parameter NULL ist, berechnet die BCryptDecrypt-Funktion die Größe, die für den Klartext der verschlüsselten Daten erforderlich ist, die im pbInput-Parameter übergeben werden. In diesem Fall enthält die Position, auf die der parameter pcbResult verweist, diese Größe, und die Funktion gibt STATUS_SUCCESS zurück.
Wenn die Werte der Parameter pbOutput und pbInputNULL sind, wird ein Fehler zurückgegeben, es sei denn, ein authentifizierter Verschlüsselungsalgorithmus wird verwendet. Im letzteren Fall wird der Aufruf als authentifizierter Verschlüsselungsaufruf mit Daten der Länge Null behandelt, und das Authentifizierungstag, das im Parameter pPaddingInfo übergeben wird, wird überprüft.
[in] cbOutput
Die Größe des pbOutput-Puffers in Bytes. Dieser Parameter wird ignoriert, wenn der pbOutput-ParameterNULL ist.
[out] pcbResult
Ein Zeiger auf eine ULONG-Variable , um die Anzahl der bytes zu empfangen, die in den pbOutput-Puffer kopiert wurden. Wenn pbOutputNULL ist, empfängt dies die Größe in Bytes, die für den Klartext erforderlich ist.
[in] dwFlags
Ein Satz von Flags, die das Verhalten dieser Funktion ändern. Der zulässige Satz von Flags hängt vom Typ des Schlüssels ab, der durch den hKey-Parameter angegeben wird.
Wenn der Schlüssel ein symmetrischer Schlüssel ist, kann dies null oder der folgende Wert sein.
Wert | Bedeutung |
---|---|
|
Die Daten wurden auf die nächste Blockgröße aufgefüllt, als sie verschlüsselt wurden. Wenn dieses Flag mit der Funktion BCryptEncrypt verwendet wurde, muss es auch in dieser Funktion angegeben werden. Dieses Flag darf nicht mit den authentifizierten Verschlüsselungsmodi (AES-CCM und AES-GCM) verwendet werden. |
Wenn der Schlüssel ein asymmetrischer Schlüssel ist, kann dies einer der folgenden Werte sein.
Wert | Bedeutung |
---|---|
|
Verwenden Sie keinen Abstand. Der Parameter pPaddingInfo wird nicht verwendet. Der cbInput-Parameter muss ein Vielfaches der Blockgröße des Algorithmus sein.
Die Blockgröße kann durch Aufrufen der BCryptGetProperty-Funktion abgerufen werden, um die BCRYPT_BLOCK_LENGTH-Eigenschaft für den Schlüssel abzurufen. Dadurch wird die Größe eines Blocks für den Algorithmus bereitgestellt. |
|
Das Schema Optimal Asymmetric Encryption Padding (OAEP) wurde verwendet, wenn die Daten verschlüsselt wurden. Der pPaddingInfo-Parameter ist ein Zeiger auf eine BCRYPT_OAEP_PADDING_INFO-Struktur . |
|
Die Daten wurden mit einer Zufallszahl aufgefüllt, als die Daten verschlüsselt wurden. Der Parameter pPaddingInfo wird nicht verwendet. |
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 |
---|---|
|
Die Funktion war erfolgreich. |
|
Das berechnete Authentifizierungstag stimmte nicht mit dem wert überein, der im pPaddingInfo-Parameter angegeben wurde. |
|
Die vom cbOutput-Parameter angegebene Größe ist nicht groß genug, um den Verschlüsselungstext zu enthalten. |
|
Der cbInput-Parameter ist kein Vielfaches der Blockgröße des Algorithmus, und das flag BCRYPT_BLOCK_PADDING wurde im dwFlags-Parameter nicht angegeben. |
|
Das Schlüsselhandle im hKey-Parameter ist ungültig. |
|
Mindestens ein Parameter ist ungültig. |
|
Der Algorithmus unterstützt keine Entschlüsselung. |
Hinweise
Die Parameter pbInput und pbOutput können gleich sein. In diesem Fall führt diese Funktion die entschlüsselte Stelle aus. Wenn pbInput und pbOutput ungleich sind, überschneiden sich die beiden Puffer möglicherweise nicht.
Je nachdem, welche Prozessormodi ein Anbieter unterstützt, kann BCryptDecrypt entweder über den Benutzermodus oder den Kernelmodus aufgerufen werden. Aufrufer im Kernelmodus können entweder am PASSIVE_LEVELIRQL oder DISPATCH_LEVEL IRQL ausgeführt werden. 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 BCryptDecrypt-Funktion übergeben werden, müssen auf nicht ausgestellten (oder gesperrten) Speicher 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: Verwenden Sie Ksecdd.lib, um diese Funktion im Kernelmodus aufzurufen.
Anforderungen
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 |