Freigeben über


Typische CNG-Programmierung

Die CNG-API implementiert ein erweiterbares Anbietermodell, mit dem Sie einen Anbieter laden können, indem Sie den erforderlichen Kryptografiealgorithmus anstelle eines bestimmten Anbieters angeben. Der Vorteil besteht darin, dass ein Algorithmusanbieter ersetzt oder aktualisiert werden kann und Sie ihren Code nicht auf irgendeine Weise ändern müssen, um den neuen Anbieter zu verwenden. Wenn ein Algorithmus in Zukunft als unsicher eingestuft wird, kann eine sicherere Version dieses Algorithmus installiert werden, ohne den Code zu beeinträchtigen. Die meisten CNG-APIs erfordern einen Anbieter oder ein objekt, das von einem Anbieter erstellt wurde.

Die typischen Schritte bei der Verwendung der CNG-API für kryptografische Grundtypen sind wie folgt:

  1. Öffnen des Algorithmusanbieters
  2. Abrufen oder Festlegen von Algorithmuseigenschaften
  3. Erstellen oder Importieren eines Schlüssels
  4. Ausführen kryptografischer Vorgänge
  5. Schließen des Algorithmusanbieters

Weitere Informationen finden Sie unter Programmierbeispiele.

Öffnen des Algorithmusanbieters

Die funktion BCryptOpenAlgorithmProvider bietet Ihnen ein Algorithmusanbieterhandle, das in nachfolgenden CNG-APIs verwendet wird, z. B. BCryptCreateHash oder BCryptGenerateKeyPair.

Abrufen oder Festlegen von Algorithmuseigenschaften

Sie können das Algorithmusanbieterhandle verwenden, um Implementierungsdetails für den Algorithmus abzurufen, z. B. die Schlüsselgröße oder den aktuellen Betriebsmodus. Sie verwenden die BCryptGetProperty--Funktion, um bestimmte Eigenschaften abzurufen.

Sie können auch die Eigenschaften des Algorithmus ändern. Wenn Sie beispielsweise die ECB-Blockchiffrekette mit AES verwenden möchten, legen Sie die BCRYPT_CHAINING_MODE-Eigenschaft eines AES-Algorithmus auf BCRYPT_CHAIN_MODE_ECBfest; die Eigenschaft wird allen AES-Schlüsseln zugewiesen, die mit diesem Algorithmushandle erstellt wurden, ohne dass jeder AES-Schlüssel konfiguriert werden muss. Sie verwenden die BCryptSetProperty--Funktion, um diese Eigenschaften zu ändern.

Erstellen oder Importieren eines Schlüssels

Je nachdem, welche Art von Algorithmus Sie verwenden, müssen Sie möglicherweise einen Schlüssel erstellen oder laden. Beispielsweise übernimmt die BCryptEncrypt Funktion ein Schlüsselhandle für den ersten Parameter. Wenn diese Funktion Daten mit einem symmetrischen Verschlüsselungsalgorithmus wie AES verschlüsseln soll, müssen Sie zuerst einen Schlüssel abrufen. Wie Sie den Schlüssel abrufen, hängt von der Art des verwendeten Algorithmus und der Quelle des Schlüssels ab.

Sie können kurzlebige Schlüssel mit den funktionen BCryptGenerateSymmetricKey und BCryptGenerateKeyPair erstellen. Sie können auch kurzlebige Schlüssel aus einem Speicher-BLOB mit dem BCryptImportKey- und BCryptImportKeyPair--Funktionen importieren.

Bei dauerhaften Schlüsseln verwenden Sie die Schlüsselspeicherfunktionen, um einen Schlüsselspeicheranbieter zu laden und dann die Schlüssel zu erstellen oder zu laden. Sie können diese Funktionen auch verwenden, um kurzlebige Schlüssel zu erstellen oder zu laden, indem Sie NULL- für alle Containernamen übergeben. Weitere Informationen zu den wichtigsten Speicherfunktionen finden Sie unter CNG Key Storage Functions.

Ausführen kryptografischer Vorgänge

Sie sind nun bereit, den kryptografischen Vorgang auszuführen, z. B. das Verschlüsseln oder Entschlüsseln von Daten mithilfe der BCryptEncrypt oder BCryptDecrypt Funktionen.

Schließen des Algorithmusanbieters

Wenn der Anbieter nicht mehr benötigt wird, müssen Sie das Handle an die BCryptCloseAlgorithmProvider Funktion übergeben, um den Anbieter zu schließen. Dies bewirkt, dass der Anbieter alle Ressourcen freigibt, die für diese Algorithmusanbieterinstanz zugewiesen wurden. Nachdem ein Anbieterhandle geschlossen wurde, kann es nicht wiederverwendet werden.

Das Laden eines Anbieters kann ein relativ zeitintensiver Prozess sein. Daher sollten Sie alle Anbieterhandles zwischenspeichern, auf die Sie während der Lebensdauer Ihrer Anwendung mehrmals verweisen.

Programmierbeispiele

In den folgenden Beispielen wird beschrieben, wie Sie bestimmte kryptografische Vorgänge mit CNG ausführen.